Statistics
| Branch: | Revision:

root / vl.c @ 6295e564

History | View | Annotate | Download (140.7 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 "bt-host.h"
142
#include "net.h"
143
#include "monitor.h"
144
#include "console.h"
145
#include "sysemu.h"
146
#include "gdbstub.h"
147
#include "qemu-timer.h"
148
#include "qemu-char.h"
149
#include "cache-utils.h"
150
#include "block.h"
151
#include "dma.h"
152
#include "audio/audio.h"
153
#include "migration.h"
154
#include "kvm.h"
155
#include "balloon.h"
156

    
157
#include "disas.h"
158

    
159
#include "exec-all.h"
160

    
161
#include "qemu_socket.h"
162

    
163
#if defined(CONFIG_SLIRP)
164
#include "libslirp.h"
165
#endif
166

    
167
//#define DEBUG_UNUSED_IOPORT
168
//#define DEBUG_IOPORT
169
//#define DEBUG_NET
170
//#define DEBUG_SLIRP
171

    
172

    
173
#ifdef DEBUG_IOPORT
174
#  define LOG_IOPORT(...) qemu_log_mask(CPU_LOG_IOPORT, ## __VA_ARGS__)
175
#else
176
#  define LOG_IOPORT(...) do { } while (0)
177
#endif
178

    
179
#define DEFAULT_RAM_SIZE 128
180

    
181
/* Max number of USB devices that can be specified on the commandline.  */
182
#define MAX_USB_CMDLINE 8
183

    
184
/* Max number of bluetooth switches on the commandline.  */
185
#define MAX_BT_CMDLINE 10
186

    
187
/* XXX: use a two level table to limit memory usage */
188
#define MAX_IOPORTS 65536
189

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

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

    
277
uint8_t qemu_uuid[16];
278

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

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

    
285
static IOPortReadFunc default_ioport_readb, default_ioport_readw, default_ioport_readl;
286
static IOPortWriteFunc default_ioport_writeb, default_ioport_writew, default_ioport_writel;
287

    
288
static uint32_t ioport_read(int index, uint32_t address)
289
{
290
    static IOPortReadFunc *default_func[3] = {
291
        default_ioport_readb,
292
        default_ioport_readw,
293
        default_ioport_readl
294
    };
295
    IOPortReadFunc *func = ioport_read_table[index][address];
296
    if (!func)
297
        func = default_func[index];
298
    return func(ioport_opaque[address], address);
299
}
300

    
301
static void ioport_write(int index, uint32_t address, uint32_t data)
302
{
303
    static IOPortWriteFunc *default_func[3] = {
304
        default_ioport_writeb,
305
        default_ioport_writew,
306
        default_ioport_writel
307
    };
308
    IOPortWriteFunc *func = ioport_write_table[index][address];
309
    if (!func)
310
        func = default_func[index];
311
    func(ioport_opaque[address], address, data);
312
}
313

    
314
static uint32_t default_ioport_readb(void *opaque, uint32_t address)
315
{
316
#ifdef DEBUG_UNUSED_IOPORT
317
    fprintf(stderr, "unused inb: port=0x%04x\n", address);
318
#endif
319
    return 0xff;
320
}
321

    
322
static void default_ioport_writeb(void *opaque, uint32_t address, uint32_t data)
323
{
324
#ifdef DEBUG_UNUSED_IOPORT
325
    fprintf(stderr, "unused outb: port=0x%04x data=0x%02x\n", address, data);
326
#endif
327
}
328

    
329
/* default is to make two byte accesses */
330
static uint32_t default_ioport_readw(void *opaque, uint32_t address)
331
{
332
    uint32_t data;
333
    data = ioport_read(0, address);
334
    address = (address + 1) & (MAX_IOPORTS - 1);
335
    data |= ioport_read(0, address) << 8;
336
    return data;
337
}
338

    
339
static void default_ioport_writew(void *opaque, uint32_t address, uint32_t data)
340
{
341
    ioport_write(0, address, data & 0xff);
342
    address = (address + 1) & (MAX_IOPORTS - 1);
343
    ioport_write(0, address, (data >> 8) & 0xff);
344
}
345

    
346
static uint32_t default_ioport_readl(void *opaque, uint32_t address)
347
{
348
#ifdef DEBUG_UNUSED_IOPORT
349
    fprintf(stderr, "unused inl: port=0x%04x\n", address);
350
#endif
351
    return 0xffffffff;
352
}
353

    
354
static void default_ioport_writel(void *opaque, uint32_t address, uint32_t data)
355
{
356
#ifdef DEBUG_UNUSED_IOPORT
357
    fprintf(stderr, "unused outl: port=0x%04x data=0x%02x\n", address, data);
358
#endif
359
}
360

    
361
/* size is the word size in byte */
362
int register_ioport_read(int start, int length, int size,
363
                         IOPortReadFunc *func, void *opaque)
364
{
365
    int i, bsize;
366

    
367
    if (size == 1) {
368
        bsize = 0;
369
    } else if (size == 2) {
370
        bsize = 1;
371
    } else if (size == 4) {
372
        bsize = 2;
373
    } else {
374
        hw_error("register_ioport_read: invalid size");
375
        return -1;
376
    }
377
    for(i = start; i < start + length; i += size) {
378
        ioport_read_table[bsize][i] = func;
379
        if (ioport_opaque[i] != NULL && ioport_opaque[i] != opaque)
380
            hw_error("register_ioport_read: invalid opaque");
381
        ioport_opaque[i] = opaque;
382
    }
383
    return 0;
384
}
385

    
386
/* size is the word size in byte */
387
int register_ioport_write(int start, int length, int size,
388
                          IOPortWriteFunc *func, void *opaque)
389
{
390
    int i, bsize;
391

    
392
    if (size == 1) {
393
        bsize = 0;
394
    } else if (size == 2) {
395
        bsize = 1;
396
    } else if (size == 4) {
397
        bsize = 2;
398
    } else {
399
        hw_error("register_ioport_write: invalid size");
400
        return -1;
401
    }
402
    for(i = start; i < start + length; i += size) {
403
        ioport_write_table[bsize][i] = func;
404
        if (ioport_opaque[i] != NULL && ioport_opaque[i] != opaque)
405
            hw_error("register_ioport_write: invalid opaque");
406
        ioport_opaque[i] = opaque;
407
    }
408
    return 0;
409
}
410

    
411
void isa_unassign_ioport(int start, int length)
412
{
413
    int i;
414

    
415
    for(i = start; i < start + length; i++) {
416
        ioport_read_table[0][i] = default_ioport_readb;
417
        ioport_read_table[1][i] = default_ioport_readw;
418
        ioport_read_table[2][i] = default_ioport_readl;
419

    
420
        ioport_write_table[0][i] = default_ioport_writeb;
421
        ioport_write_table[1][i] = default_ioport_writew;
422
        ioport_write_table[2][i] = default_ioport_writel;
423

    
424
        ioport_opaque[i] = NULL;
425
    }
426
}
427

    
428
/***********************************************************/
429

    
430
void cpu_outb(CPUState *env, int addr, int val)
431
{
432
    LOG_IOPORT("outb: %04x %02x\n", addr, val);
433
    ioport_write(0, addr, val);
434
#ifdef USE_KQEMU
435
    if (env)
436
        env->last_io_time = cpu_get_time_fast();
437
#endif
438
}
439

    
440
void cpu_outw(CPUState *env, int addr, int val)
441
{
442
    LOG_IOPORT("outw: %04x %04x\n", addr, val);
443
    ioport_write(1, addr, val);
444
#ifdef USE_KQEMU
445
    if (env)
446
        env->last_io_time = cpu_get_time_fast();
447
#endif
448
}
449

    
450
void cpu_outl(CPUState *env, int addr, int val)
451
{
452
    LOG_IOPORT("outl: %04x %08x\n", addr, val);
453
    ioport_write(2, addr, val);
454
#ifdef USE_KQEMU
455
    if (env)
456
        env->last_io_time = cpu_get_time_fast();
457
#endif
458
}
459

    
460
int cpu_inb(CPUState *env, int addr)
461
{
462
    int val;
463
    val = ioport_read(0, addr);
464
    LOG_IOPORT("inb : %04x %02x\n", addr, val);
465
#ifdef USE_KQEMU
466
    if (env)
467
        env->last_io_time = cpu_get_time_fast();
468
#endif
469
    return val;
470
}
471

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

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

    
496
/***********************************************************/
497
void hw_error(const char *fmt, ...)
498
{
499
    va_list ap;
500
    CPUState *env;
501

    
502
    va_start(ap, fmt);
503
    fprintf(stderr, "qemu: hardware error: ");
504
    vfprintf(stderr, fmt, ap);
505
    fprintf(stderr, "\n");
506
    for(env = first_cpu; env != NULL; env = env->next_cpu) {
507
        fprintf(stderr, "CPU #%d:\n", env->cpu_index);
508
#ifdef TARGET_I386
509
        cpu_dump_state(env, stderr, fprintf, X86_DUMP_FPU);
510
#else
511
        cpu_dump_state(env, stderr, fprintf, 0);
512
#endif
513
    }
514
    va_end(ap);
515
    abort();
516
}
517
 
518
/***************/
519
/* ballooning */
520

    
521
static QEMUBalloonEvent *qemu_balloon_event;
522
void *qemu_balloon_event_opaque;
523

    
524
void qemu_add_balloon_handler(QEMUBalloonEvent *func, void *opaque)
525
{
526
    qemu_balloon_event = func;
527
    qemu_balloon_event_opaque = opaque;
528
}
529

    
530
void qemu_balloon(ram_addr_t target)
531
{
532
    if (qemu_balloon_event)
533
        qemu_balloon_event(qemu_balloon_event_opaque, target);
534
}
535

    
536
ram_addr_t qemu_balloon_status(void)
537
{
538
    if (qemu_balloon_event)
539
        return qemu_balloon_event(qemu_balloon_event_opaque, 0);
540
    return 0;
541
}
542

    
543
/***********************************************************/
544
/* keyboard/mouse */
545

    
546
static QEMUPutKBDEvent *qemu_put_kbd_event;
547
static void *qemu_put_kbd_event_opaque;
548
static QEMUPutMouseEntry *qemu_put_mouse_event_head;
549
static QEMUPutMouseEntry *qemu_put_mouse_event_current;
550

    
551
void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
552
{
553
    qemu_put_kbd_event_opaque = opaque;
554
    qemu_put_kbd_event = func;
555
}
556

    
557
QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
558
                                                void *opaque, int absolute,
559
                                                const char *name)
560
{
561
    QEMUPutMouseEntry *s, *cursor;
562

    
563
    s = qemu_mallocz(sizeof(QEMUPutMouseEntry));
564

    
565
    s->qemu_put_mouse_event = func;
566
    s->qemu_put_mouse_event_opaque = opaque;
567
    s->qemu_put_mouse_event_absolute = absolute;
568
    s->qemu_put_mouse_event_name = qemu_strdup(name);
569
    s->next = NULL;
570

    
571
    if (!qemu_put_mouse_event_head) {
572
        qemu_put_mouse_event_head = qemu_put_mouse_event_current = s;
573
        return s;
574
    }
575

    
576
    cursor = qemu_put_mouse_event_head;
577
    while (cursor->next != NULL)
578
        cursor = cursor->next;
579

    
580
    cursor->next = s;
581
    qemu_put_mouse_event_current = s;
582

    
583
    return s;
584
}
585

    
586
void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry)
587
{
588
    QEMUPutMouseEntry *prev = NULL, *cursor;
589

    
590
    if (!qemu_put_mouse_event_head || entry == NULL)
591
        return;
592

    
593
    cursor = qemu_put_mouse_event_head;
594
    while (cursor != NULL && cursor != entry) {
595
        prev = cursor;
596
        cursor = cursor->next;
597
    }
598

    
599
    if (cursor == NULL) // does not exist or list empty
600
        return;
601
    else if (prev == NULL) { // entry is head
602
        qemu_put_mouse_event_head = cursor->next;
603
        if (qemu_put_mouse_event_current == entry)
604
            qemu_put_mouse_event_current = cursor->next;
605
        qemu_free(entry->qemu_put_mouse_event_name);
606
        qemu_free(entry);
607
        return;
608
    }
609

    
610
    prev->next = entry->next;
611

    
612
    if (qemu_put_mouse_event_current == entry)
613
        qemu_put_mouse_event_current = prev;
614

    
615
    qemu_free(entry->qemu_put_mouse_event_name);
616
    qemu_free(entry);
617
}
618

    
619
void kbd_put_keycode(int keycode)
620
{
621
    if (qemu_put_kbd_event) {
622
        qemu_put_kbd_event(qemu_put_kbd_event_opaque, keycode);
623
    }
624
}
625

    
626
void kbd_mouse_event(int dx, int dy, int dz, int buttons_state)
627
{
628
    QEMUPutMouseEvent *mouse_event;
629
    void *mouse_event_opaque;
630
    int width;
631

    
632
    if (!qemu_put_mouse_event_current) {
633
        return;
634
    }
635

    
636
    mouse_event =
637
        qemu_put_mouse_event_current->qemu_put_mouse_event;
638
    mouse_event_opaque =
639
        qemu_put_mouse_event_current->qemu_put_mouse_event_opaque;
640

    
641
    if (mouse_event) {
642
        if (graphic_rotate) {
643
            if (qemu_put_mouse_event_current->qemu_put_mouse_event_absolute)
644
                width = 0x7fff;
645
            else
646
                width = graphic_width - 1;
647
            mouse_event(mouse_event_opaque,
648
                                 width - dy, dx, dz, buttons_state);
649
        } else
650
            mouse_event(mouse_event_opaque,
651
                                 dx, dy, dz, buttons_state);
652
    }
653
}
654

    
655
int kbd_mouse_is_absolute(void)
656
{
657
    if (!qemu_put_mouse_event_current)
658
        return 0;
659

    
660
    return qemu_put_mouse_event_current->qemu_put_mouse_event_absolute;
661
}
662

    
663
void do_info_mice(Monitor *mon)
664
{
665
    QEMUPutMouseEntry *cursor;
666
    int index = 0;
667

    
668
    if (!qemu_put_mouse_event_head) {
669
        monitor_printf(mon, "No mouse devices connected\n");
670
        return;
671
    }
672

    
673
    monitor_printf(mon, "Mouse devices available:\n");
674
    cursor = qemu_put_mouse_event_head;
675
    while (cursor != NULL) {
676
        monitor_printf(mon, "%c Mouse #%d: %s\n",
677
                       (cursor == qemu_put_mouse_event_current ? '*' : ' '),
678
                       index, cursor->qemu_put_mouse_event_name);
679
        index++;
680
        cursor = cursor->next;
681
    }
682
}
683

    
684
void do_mouse_set(Monitor *mon, int index)
685
{
686
    QEMUPutMouseEntry *cursor;
687
    int i = 0;
688

    
689
    if (!qemu_put_mouse_event_head) {
690
        monitor_printf(mon, "No mouse devices connected\n");
691
        return;
692
    }
693

    
694
    cursor = qemu_put_mouse_event_head;
695
    while (cursor != NULL && index != i) {
696
        i++;
697
        cursor = cursor->next;
698
    }
699

    
700
    if (cursor != NULL)
701
        qemu_put_mouse_event_current = cursor;
702
    else
703
        monitor_printf(mon, "Mouse at given index not found\n");
704
}
705

    
706
/* compute with 96 bit intermediate result: (a*b)/c */
707
uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
708
{
709
    union {
710
        uint64_t ll;
711
        struct {
712
#ifdef WORDS_BIGENDIAN
713
            uint32_t high, low;
714
#else
715
            uint32_t low, high;
716
#endif
717
        } l;
718
    } u, res;
719
    uint64_t rl, rh;
720

    
721
    u.ll = a;
722
    rl = (uint64_t)u.l.low * (uint64_t)b;
723
    rh = (uint64_t)u.l.high * (uint64_t)b;
724
    rh += (rl >> 32);
725
    res.l.high = rh / c;
726
    res.l.low = (((rh % c) << 32) + (rl & 0xffffffff)) / c;
727
    return res.ll;
728
}
729

    
730
/***********************************************************/
731
/* real time host monotonic timer */
732

    
733
#define QEMU_TIMER_BASE 1000000000LL
734

    
735
#ifdef WIN32
736

    
737
static int64_t clock_freq;
738

    
739
static void init_get_clock(void)
740
{
741
    LARGE_INTEGER freq;
742
    int ret;
743
    ret = QueryPerformanceFrequency(&freq);
744
    if (ret == 0) {
745
        fprintf(stderr, "Could not calibrate ticks\n");
746
        exit(1);
747
    }
748
    clock_freq = freq.QuadPart;
749
}
750

    
751
static int64_t get_clock(void)
752
{
753
    LARGE_INTEGER ti;
754
    QueryPerformanceCounter(&ti);
755
    return muldiv64(ti.QuadPart, QEMU_TIMER_BASE, clock_freq);
756
}
757

    
758
#else
759

    
760
static int use_rt_clock;
761

    
762
static void init_get_clock(void)
763
{
764
    use_rt_clock = 0;
765
#if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000) \
766
    || defined(__DragonFly__)
767
    {
768
        struct timespec ts;
769
        if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) {
770
            use_rt_clock = 1;
771
        }
772
    }
773
#endif
774
}
775

    
776
static int64_t get_clock(void)
777
{
778
#if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000) \
779
        || defined(__DragonFly__)
780
    if (use_rt_clock) {
781
        struct timespec ts;
782
        clock_gettime(CLOCK_MONOTONIC, &ts);
783
        return ts.tv_sec * 1000000000LL + ts.tv_nsec;
784
    } else
785
#endif
786
    {
787
        /* XXX: using gettimeofday leads to problems if the date
788
           changes, so it should be avoided. */
789
        struct timeval tv;
790
        gettimeofday(&tv, NULL);
791
        return tv.tv_sec * 1000000000LL + (tv.tv_usec * 1000);
792
    }
793
}
794
#endif
795

    
796
/* Return the virtual CPU time, based on the instruction counter.  */
797
static int64_t cpu_get_icount(void)
798
{
799
    int64_t icount;
800
    CPUState *env = cpu_single_env;;
801
    icount = qemu_icount;
802
    if (env) {
803
        if (!can_do_io(env))
804
            fprintf(stderr, "Bad clock read\n");
805
        icount -= (env->icount_decr.u16.low + env->icount_extra);
806
    }
807
    return qemu_icount_bias + (icount << icount_time_shift);
808
}
809

    
810
/***********************************************************/
811
/* guest cycle counter */
812

    
813
static int64_t cpu_ticks_prev;
814
static int64_t cpu_ticks_offset;
815
static int64_t cpu_clock_offset;
816
static int cpu_ticks_enabled;
817

    
818
/* return the host CPU cycle counter and handle stop/restart */
819
int64_t cpu_get_ticks(void)
820
{
821
    if (use_icount) {
822
        return cpu_get_icount();
823
    }
824
    if (!cpu_ticks_enabled) {
825
        return cpu_ticks_offset;
826
    } else {
827
        int64_t ticks;
828
        ticks = cpu_get_real_ticks();
829
        if (cpu_ticks_prev > ticks) {
830
            /* Note: non increasing ticks may happen if the host uses
831
               software suspend */
832
            cpu_ticks_offset += cpu_ticks_prev - ticks;
833
        }
834
        cpu_ticks_prev = ticks;
835
        return ticks + cpu_ticks_offset;
836
    }
837
}
838

    
839
/* return the host CPU monotonic timer and handle stop/restart */
840
static int64_t cpu_get_clock(void)
841
{
842
    int64_t ti;
843
    if (!cpu_ticks_enabled) {
844
        return cpu_clock_offset;
845
    } else {
846
        ti = get_clock();
847
        return ti + cpu_clock_offset;
848
    }
849
}
850

    
851
/* enable cpu_get_ticks() */
852
void cpu_enable_ticks(void)
853
{
854
    if (!cpu_ticks_enabled) {
855
        cpu_ticks_offset -= cpu_get_real_ticks();
856
        cpu_clock_offset -= get_clock();
857
        cpu_ticks_enabled = 1;
858
    }
859
}
860

    
861
/* disable cpu_get_ticks() : the clock is stopped. You must not call
862
   cpu_get_ticks() after that.  */
863
void cpu_disable_ticks(void)
864
{
865
    if (cpu_ticks_enabled) {
866
        cpu_ticks_offset = cpu_get_ticks();
867
        cpu_clock_offset = cpu_get_clock();
868
        cpu_ticks_enabled = 0;
869
    }
870
}
871

    
872
/***********************************************************/
873
/* timers */
874

    
875
#define QEMU_TIMER_REALTIME 0
876
#define QEMU_TIMER_VIRTUAL  1
877

    
878
struct QEMUClock {
879
    int type;
880
    /* XXX: add frequency */
881
};
882

    
883
struct QEMUTimer {
884
    QEMUClock *clock;
885
    int64_t expire_time;
886
    QEMUTimerCB *cb;
887
    void *opaque;
888
    struct QEMUTimer *next;
889
};
890

    
891
struct qemu_alarm_timer {
892
    char const *name;
893
    unsigned int flags;
894

    
895
    int (*start)(struct qemu_alarm_timer *t);
896
    void (*stop)(struct qemu_alarm_timer *t);
897
    void (*rearm)(struct qemu_alarm_timer *t);
898
    void *priv;
899
};
900

    
901
#define ALARM_FLAG_DYNTICKS  0x1
902
#define ALARM_FLAG_EXPIRED   0x2
903

    
904
static inline int alarm_has_dynticks(struct qemu_alarm_timer *t)
905
{
906
    return t->flags & ALARM_FLAG_DYNTICKS;
907
}
908

    
909
static void qemu_rearm_alarm_timer(struct qemu_alarm_timer *t)
910
{
911
    if (!alarm_has_dynticks(t))
912
        return;
913

    
914
    t->rearm(t);
915
}
916

    
917
/* TODO: MIN_TIMER_REARM_US should be optimized */
918
#define MIN_TIMER_REARM_US 250
919

    
920
static struct qemu_alarm_timer *alarm_timer;
921
#ifndef _WIN32
922
static int alarm_timer_rfd, alarm_timer_wfd;
923
#endif
924

    
925
#ifdef _WIN32
926

    
927
struct qemu_alarm_win32 {
928
    MMRESULT timerId;
929
    HANDLE host_alarm;
930
    unsigned int period;
931
} alarm_win32_data = {0, NULL, -1};
932

    
933
static int win32_start_timer(struct qemu_alarm_timer *t);
934
static void win32_stop_timer(struct qemu_alarm_timer *t);
935
static void win32_rearm_timer(struct qemu_alarm_timer *t);
936

    
937
#else
938

    
939
static int unix_start_timer(struct qemu_alarm_timer *t);
940
static void unix_stop_timer(struct qemu_alarm_timer *t);
941

    
942
#ifdef __linux__
943

    
944
static int dynticks_start_timer(struct qemu_alarm_timer *t);
945
static void dynticks_stop_timer(struct qemu_alarm_timer *t);
946
static void dynticks_rearm_timer(struct qemu_alarm_timer *t);
947

    
948
static int hpet_start_timer(struct qemu_alarm_timer *t);
949
static void hpet_stop_timer(struct qemu_alarm_timer *t);
950

    
951
static int rtc_start_timer(struct qemu_alarm_timer *t);
952
static void rtc_stop_timer(struct qemu_alarm_timer *t);
953

    
954
#endif /* __linux__ */
955

    
956
#endif /* _WIN32 */
957

    
958
/* Correlation between real and virtual time is always going to be
959
   fairly approximate, so ignore small variation.
960
   When the guest is idle real and virtual time will be aligned in
961
   the IO wait loop.  */
962
#define ICOUNT_WOBBLE (QEMU_TIMER_BASE / 10)
963

    
964
static void icount_adjust(void)
965
{
966
    int64_t cur_time;
967
    int64_t cur_icount;
968
    int64_t delta;
969
    static int64_t last_delta;
970
    /* If the VM is not running, then do nothing.  */
971
    if (!vm_running)
972
        return;
973

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

    
994
static void icount_adjust_rt(void * opaque)
995
{
996
    qemu_mod_timer(icount_rt_timer,
997
                   qemu_get_clock(rt_clock) + 1000);
998
    icount_adjust();
999
}
1000

    
1001
static void icount_adjust_vm(void * opaque)
1002
{
1003
    qemu_mod_timer(icount_vm_timer,
1004
                   qemu_get_clock(vm_clock) + QEMU_TIMER_BASE / 10);
1005
    icount_adjust();
1006
}
1007

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

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

    
1043
static void show_available_alarms(void)
1044
{
1045
    int i;
1046

    
1047
    printf("Available alarm timers, in order of precedence:\n");
1048
    for (i = 0; alarm_timers[i].name; i++)
1049
        printf("%s\n", alarm_timers[i].name);
1050
}
1051

    
1052
static void configure_alarms(char const *opt)
1053
{
1054
    int i;
1055
    int cur = 0;
1056
    int count = ARRAY_SIZE(alarm_timers) - 1;
1057
    char *arg;
1058
    char *name;
1059
    struct qemu_alarm_timer tmp;
1060

    
1061
    if (!strcmp(opt, "?")) {
1062
        show_available_alarms();
1063
        exit(0);
1064
    }
1065

    
1066
    arg = strdup(opt);
1067

    
1068
    /* Reorder the array */
1069
    name = strtok(arg, ",");
1070
    while (name) {
1071
        for (i = 0; i < count && alarm_timers[i].name; i++) {
1072
            if (!strcmp(alarm_timers[i].name, name))
1073
                break;
1074
        }
1075

    
1076
        if (i == count) {
1077
            fprintf(stderr, "Unknown clock %s\n", name);
1078
            goto next;
1079
        }
1080

    
1081
        if (i < cur)
1082
            /* Ignore */
1083
            goto next;
1084

    
1085
        /* Swap */
1086
        tmp = alarm_timers[i];
1087
        alarm_timers[i] = alarm_timers[cur];
1088
        alarm_timers[cur] = tmp;
1089

    
1090
        cur++;
1091
next:
1092
        name = strtok(NULL, ",");
1093
    }
1094

    
1095
    free(arg);
1096

    
1097
    if (cur) {
1098
        /* Disable remaining timers */
1099
        for (i = cur; i < count; i++)
1100
            alarm_timers[i].name = NULL;
1101
    } else {
1102
        show_available_alarms();
1103
        exit(1);
1104
    }
1105
}
1106

    
1107
QEMUClock *rt_clock;
1108
QEMUClock *vm_clock;
1109

    
1110
static QEMUTimer *active_timers[2];
1111

    
1112
static QEMUClock *qemu_new_clock(int type)
1113
{
1114
    QEMUClock *clock;
1115
    clock = qemu_mallocz(sizeof(QEMUClock));
1116
    clock->type = type;
1117
    return clock;
1118
}
1119

    
1120
QEMUTimer *qemu_new_timer(QEMUClock *clock, QEMUTimerCB *cb, void *opaque)
1121
{
1122
    QEMUTimer *ts;
1123

    
1124
    ts = qemu_mallocz(sizeof(QEMUTimer));
1125
    ts->clock = clock;
1126
    ts->cb = cb;
1127
    ts->opaque = opaque;
1128
    return ts;
1129
}
1130

    
1131
void qemu_free_timer(QEMUTimer *ts)
1132
{
1133
    qemu_free(ts);
1134
}
1135

    
1136
/* stop a timer, but do not dealloc it */
1137
void qemu_del_timer(QEMUTimer *ts)
1138
{
1139
    QEMUTimer **pt, *t;
1140

    
1141
    /* NOTE: this code must be signal safe because
1142
       qemu_timer_expired() can be called from a signal. */
1143
    pt = &active_timers[ts->clock->type];
1144
    for(;;) {
1145
        t = *pt;
1146
        if (!t)
1147
            break;
1148
        if (t == ts) {
1149
            *pt = t->next;
1150
            break;
1151
        }
1152
        pt = &t->next;
1153
    }
1154
}
1155

    
1156
/* modify the current timer so that it will be fired when current_time
1157
   >= expire_time. The corresponding callback will be called. */
1158
void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time)
1159
{
1160
    QEMUTimer **pt, *t;
1161

    
1162
    qemu_del_timer(ts);
1163

    
1164
    /* add the timer in the sorted list */
1165
    /* NOTE: this code must be signal safe because
1166
       qemu_timer_expired() can be called from a signal. */
1167
    pt = &active_timers[ts->clock->type];
1168
    for(;;) {
1169
        t = *pt;
1170
        if (!t)
1171
            break;
1172
        if (t->expire_time > expire_time)
1173
            break;
1174
        pt = &t->next;
1175
    }
1176
    ts->expire_time = expire_time;
1177
    ts->next = *pt;
1178
    *pt = ts;
1179

    
1180
    /* Rearm if necessary  */
1181
    if (pt == &active_timers[ts->clock->type]) {
1182
        if ((alarm_timer->flags & ALARM_FLAG_EXPIRED) == 0) {
1183
            qemu_rearm_alarm_timer(alarm_timer);
1184
        }
1185
        /* Interrupt execution to force deadline recalculation.  */
1186
        if (use_icount && cpu_single_env) {
1187
            cpu_exit(cpu_single_env);
1188
        }
1189
    }
1190
}
1191

    
1192
int qemu_timer_pending(QEMUTimer *ts)
1193
{
1194
    QEMUTimer *t;
1195
    for(t = active_timers[ts->clock->type]; t != NULL; t = t->next) {
1196
        if (t == ts)
1197
            return 1;
1198
    }
1199
    return 0;
1200
}
1201

    
1202
static inline int qemu_timer_expired(QEMUTimer *timer_head, int64_t current_time)
1203
{
1204
    if (!timer_head)
1205
        return 0;
1206
    return (timer_head->expire_time <= current_time);
1207
}
1208

    
1209
static void qemu_run_timers(QEMUTimer **ptimer_head, int64_t current_time)
1210
{
1211
    QEMUTimer *ts;
1212

    
1213
    for(;;) {
1214
        ts = *ptimer_head;
1215
        if (!ts || ts->expire_time > current_time)
1216
            break;
1217
        /* remove timer from the list before calling the callback */
1218
        *ptimer_head = ts->next;
1219
        ts->next = NULL;
1220

    
1221
        /* run the callback (the timer list can be modified) */
1222
        ts->cb(ts->opaque);
1223
    }
1224
}
1225

    
1226
int64_t qemu_get_clock(QEMUClock *clock)
1227
{
1228
    switch(clock->type) {
1229
    case QEMU_TIMER_REALTIME:
1230
        return get_clock() / 1000000;
1231
    default:
1232
    case QEMU_TIMER_VIRTUAL:
1233
        if (use_icount) {
1234
            return cpu_get_icount();
1235
        } else {
1236
            return cpu_get_clock();
1237
        }
1238
    }
1239
}
1240

    
1241
static void init_timers(void)
1242
{
1243
    init_get_clock();
1244
    ticks_per_sec = QEMU_TIMER_BASE;
1245
    rt_clock = qemu_new_clock(QEMU_TIMER_REALTIME);
1246
    vm_clock = qemu_new_clock(QEMU_TIMER_VIRTUAL);
1247
}
1248

    
1249
/* save a timer */
1250
void qemu_put_timer(QEMUFile *f, QEMUTimer *ts)
1251
{
1252
    uint64_t expire_time;
1253

    
1254
    if (qemu_timer_pending(ts)) {
1255
        expire_time = ts->expire_time;
1256
    } else {
1257
        expire_time = -1;
1258
    }
1259
    qemu_put_be64(f, expire_time);
1260
}
1261

    
1262
void qemu_get_timer(QEMUFile *f, QEMUTimer *ts)
1263
{
1264
    uint64_t expire_time;
1265

    
1266
    expire_time = qemu_get_be64(f);
1267
    if (expire_time != -1) {
1268
        qemu_mod_timer(ts, expire_time);
1269
    } else {
1270
        qemu_del_timer(ts);
1271
    }
1272
}
1273

    
1274
static void timer_save(QEMUFile *f, void *opaque)
1275
{
1276
    if (cpu_ticks_enabled) {
1277
        hw_error("cannot save state if virtual timers are running");
1278
    }
1279
    qemu_put_be64(f, cpu_ticks_offset);
1280
    qemu_put_be64(f, ticks_per_sec);
1281
    qemu_put_be64(f, cpu_clock_offset);
1282
}
1283

    
1284
static int timer_load(QEMUFile *f, void *opaque, int version_id)
1285
{
1286
    if (version_id != 1 && version_id != 2)
1287
        return -EINVAL;
1288
    if (cpu_ticks_enabled) {
1289
        return -EINVAL;
1290
    }
1291
    cpu_ticks_offset=qemu_get_be64(f);
1292
    ticks_per_sec=qemu_get_be64(f);
1293
    if (version_id == 2) {
1294
        cpu_clock_offset=qemu_get_be64(f);
1295
    }
1296
    return 0;
1297
}
1298

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

    
1343
#ifdef _WIN32
1344
        struct qemu_alarm_win32 *data = ((struct qemu_alarm_timer*)dwUser)->priv;
1345
        SetEvent(data->host_alarm);
1346
#else
1347
        static const char byte = 0;
1348
        write(alarm_timer_wfd, &byte, sizeof(byte));
1349
#endif
1350
        alarm_timer->flags |= ALARM_FLAG_EXPIRED;
1351

    
1352
        if (env) {
1353
            /* stop the currently executing cpu because a timer occured */
1354
            cpu_exit(env);
1355
#ifdef USE_KQEMU
1356
            if (env->kqemu_enabled) {
1357
                kqemu_cpu_interrupt(env);
1358
            }
1359
#endif
1360
        }
1361
        event_pending = 1;
1362
    }
1363
}
1364

    
1365
static int64_t qemu_next_deadline(void)
1366
{
1367
    int64_t delta;
1368

    
1369
    if (active_timers[QEMU_TIMER_VIRTUAL]) {
1370
        delta = active_timers[QEMU_TIMER_VIRTUAL]->expire_time -
1371
                     qemu_get_clock(vm_clock);
1372
    } else {
1373
        /* To avoid problems with overflow limit this to 2^32.  */
1374
        delta = INT32_MAX;
1375
    }
1376

    
1377
    if (delta < 0)
1378
        delta = 0;
1379

    
1380
    return delta;
1381
}
1382

    
1383
#if defined(__linux__) || defined(_WIN32)
1384
static uint64_t qemu_next_deadline_dyntick(void)
1385
{
1386
    int64_t delta;
1387
    int64_t rtdelta;
1388

    
1389
    if (use_icount)
1390
        delta = INT32_MAX;
1391
    else
1392
        delta = (qemu_next_deadline() + 999) / 1000;
1393

    
1394
    if (active_timers[QEMU_TIMER_REALTIME]) {
1395
        rtdelta = (active_timers[QEMU_TIMER_REALTIME]->expire_time -
1396
                 qemu_get_clock(rt_clock))*1000;
1397
        if (rtdelta < delta)
1398
            delta = rtdelta;
1399
    }
1400

    
1401
    if (delta < MIN_TIMER_REARM_US)
1402
        delta = MIN_TIMER_REARM_US;
1403

    
1404
    return delta;
1405
}
1406
#endif
1407

    
1408
#ifndef _WIN32
1409

    
1410
/* Sets a specific flag */
1411
static int fcntl_setfl(int fd, int flag)
1412
{
1413
    int flags;
1414

    
1415
    flags = fcntl(fd, F_GETFL);
1416
    if (flags == -1)
1417
        return -errno;
1418

    
1419
    if (fcntl(fd, F_SETFL, flags | flag) == -1)
1420
        return -errno;
1421

    
1422
    return 0;
1423
}
1424

    
1425
#if defined(__linux__)
1426

    
1427
#define RTC_FREQ 1024
1428

    
1429
static void enable_sigio_timer(int fd)
1430
{
1431
    struct sigaction act;
1432

    
1433
    /* timer signal */
1434
    sigfillset(&act.sa_mask);
1435
    act.sa_flags = 0;
1436
    act.sa_handler = host_alarm_handler;
1437

    
1438
    sigaction(SIGIO, &act, NULL);
1439
    fcntl_setfl(fd, O_ASYNC);
1440
    fcntl(fd, F_SETOWN, getpid());
1441
}
1442

    
1443
static int hpet_start_timer(struct qemu_alarm_timer *t)
1444
{
1445
    struct hpet_info info;
1446
    int r, fd;
1447

    
1448
    fd = open("/dev/hpet", O_RDONLY);
1449
    if (fd < 0)
1450
        return -1;
1451

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

    
1461
    /* Check capabilities */
1462
    r = ioctl(fd, HPET_INFO, &info);
1463
    if (r < 0)
1464
        goto fail;
1465

    
1466
    /* Enable periodic mode */
1467
    r = ioctl(fd, HPET_EPI, 0);
1468
    if (info.hi_flags && (r < 0))
1469
        goto fail;
1470

    
1471
    /* Enable interrupt */
1472
    r = ioctl(fd, HPET_IE_ON, 0);
1473
    if (r < 0)
1474
        goto fail;
1475

    
1476
    enable_sigio_timer(fd);
1477
    t->priv = (void *)(long)fd;
1478

    
1479
    return 0;
1480
fail:
1481
    close(fd);
1482
    return -1;
1483
}
1484

    
1485
static void hpet_stop_timer(struct qemu_alarm_timer *t)
1486
{
1487
    int fd = (long)t->priv;
1488

    
1489
    close(fd);
1490
}
1491

    
1492
static int rtc_start_timer(struct qemu_alarm_timer *t)
1493
{
1494
    int rtc_fd;
1495
    unsigned long current_rtc_freq = 0;
1496

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

    
1514
    enable_sigio_timer(rtc_fd);
1515

    
1516
    t->priv = (void *)(long)rtc_fd;
1517

    
1518
    return 0;
1519
}
1520

    
1521
static void rtc_stop_timer(struct qemu_alarm_timer *t)
1522
{
1523
    int rtc_fd = (long)t->priv;
1524

    
1525
    close(rtc_fd);
1526
}
1527

    
1528
static int dynticks_start_timer(struct qemu_alarm_timer *t)
1529
{
1530
    struct sigevent ev;
1531
    timer_t host_timer;
1532
    struct sigaction act;
1533

    
1534
    sigfillset(&act.sa_mask);
1535
    act.sa_flags = 0;
1536
    act.sa_handler = host_alarm_handler;
1537

    
1538
    sigaction(SIGALRM, &act, NULL);
1539

    
1540
    ev.sigev_value.sival_int = 0;
1541
    ev.sigev_notify = SIGEV_SIGNAL;
1542
    ev.sigev_signo = SIGALRM;
1543

    
1544
    if (timer_create(CLOCK_REALTIME, &ev, &host_timer)) {
1545
        perror("timer_create");
1546

    
1547
        /* disable dynticks */
1548
        fprintf(stderr, "Dynamic Ticks disabled\n");
1549

    
1550
        return -1;
1551
    }
1552

    
1553
    t->priv = (void *)(long)host_timer;
1554

    
1555
    return 0;
1556
}
1557

    
1558
static void dynticks_stop_timer(struct qemu_alarm_timer *t)
1559
{
1560
    timer_t host_timer = (timer_t)(long)t->priv;
1561

    
1562
    timer_delete(host_timer);
1563
}
1564

    
1565
static void dynticks_rearm_timer(struct qemu_alarm_timer *t)
1566
{
1567
    timer_t host_timer = (timer_t)(long)t->priv;
1568
    struct itimerspec timeout;
1569
    int64_t nearest_delta_us = INT64_MAX;
1570
    int64_t current_us;
1571

    
1572
    if (!active_timers[QEMU_TIMER_REALTIME] &&
1573
                !active_timers[QEMU_TIMER_VIRTUAL])
1574
        return;
1575

    
1576
    nearest_delta_us = qemu_next_deadline_dyntick();
1577

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

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

    
1599
#endif /* defined(__linux__) */
1600

    
1601
static int unix_start_timer(struct qemu_alarm_timer *t)
1602
{
1603
    struct sigaction act;
1604
    struct itimerval itv;
1605
    int err;
1606

    
1607
    /* timer signal */
1608
    sigfillset(&act.sa_mask);
1609
    act.sa_flags = 0;
1610
    act.sa_handler = host_alarm_handler;
1611

    
1612
    sigaction(SIGALRM, &act, NULL);
1613

    
1614
    itv.it_interval.tv_sec = 0;
1615
    /* for i386 kernel 2.6 to get 1 ms */
1616
    itv.it_interval.tv_usec = 999;
1617
    itv.it_value.tv_sec = 0;
1618
    itv.it_value.tv_usec = 10 * 1000;
1619

    
1620
    err = setitimer(ITIMER_REAL, &itv, NULL);
1621
    if (err)
1622
        return -1;
1623

    
1624
    return 0;
1625
}
1626

    
1627
static void unix_stop_timer(struct qemu_alarm_timer *t)
1628
{
1629
    struct itimerval itv;
1630

    
1631
    memset(&itv, 0, sizeof(itv));
1632
    setitimer(ITIMER_REAL, &itv, NULL);
1633
}
1634

    
1635
#endif /* !defined(_WIN32) */
1636

    
1637
static void try_to_rearm_timer(void *opaque)
1638
{
1639
    struct qemu_alarm_timer *t = opaque;
1640
#ifndef _WIN32
1641
    ssize_t len;
1642

    
1643
    /* Drain the notify pipe */
1644
    do {
1645
        char buffer[512];
1646
        len = read(alarm_timer_rfd, buffer, sizeof(buffer));
1647
    } while ((len == -1 && errno == EINTR) || len > 0);
1648
#endif
1649

    
1650
    if (t->flags & ALARM_FLAG_EXPIRED) {
1651
        alarm_timer->flags &= ~ALARM_FLAG_EXPIRED;
1652
        qemu_rearm_alarm_timer(alarm_timer);
1653
    }
1654
}
1655

    
1656
#ifdef _WIN32
1657

    
1658
static int win32_start_timer(struct qemu_alarm_timer *t)
1659
{
1660
    TIMECAPS tc;
1661
    struct qemu_alarm_win32 *data = t->priv;
1662
    UINT flags;
1663

    
1664
    data->host_alarm = CreateEvent(NULL, FALSE, FALSE, NULL);
1665
    if (!data->host_alarm) {
1666
        perror("Failed CreateEvent");
1667
        return -1;
1668
    }
1669

    
1670
    memset(&tc, 0, sizeof(tc));
1671
    timeGetDevCaps(&tc, sizeof(tc));
1672

    
1673
    if (data->period < tc.wPeriodMin)
1674
        data->period = tc.wPeriodMin;
1675

    
1676
    timeBeginPeriod(data->period);
1677

    
1678
    flags = TIME_CALLBACK_FUNCTION;
1679
    if (alarm_has_dynticks(t))
1680
        flags |= TIME_ONESHOT;
1681
    else
1682
        flags |= TIME_PERIODIC;
1683

    
1684
    data->timerId = timeSetEvent(1,         // interval (ms)
1685
                        data->period,       // resolution
1686
                        host_alarm_handler, // function
1687
                        (DWORD)t,           // parameter
1688
                        flags);
1689

    
1690
    if (!data->timerId) {
1691
        perror("Failed to initialize win32 alarm timer");
1692

    
1693
        timeEndPeriod(data->period);
1694
        CloseHandle(data->host_alarm);
1695
        return -1;
1696
    }
1697

    
1698
    qemu_add_wait_object(data->host_alarm, try_to_rearm_timer, t);
1699

    
1700
    return 0;
1701
}
1702

    
1703
static void win32_stop_timer(struct qemu_alarm_timer *t)
1704
{
1705
    struct qemu_alarm_win32 *data = t->priv;
1706

    
1707
    timeKillEvent(data->timerId);
1708
    timeEndPeriod(data->period);
1709

    
1710
    CloseHandle(data->host_alarm);
1711
}
1712

    
1713
static void win32_rearm_timer(struct qemu_alarm_timer *t)
1714
{
1715
    struct qemu_alarm_win32 *data = t->priv;
1716
    uint64_t nearest_delta_us;
1717

    
1718
    if (!active_timers[QEMU_TIMER_REALTIME] &&
1719
                !active_timers[QEMU_TIMER_VIRTUAL])
1720
        return;
1721

    
1722
    nearest_delta_us = qemu_next_deadline_dyntick();
1723
    nearest_delta_us /= 1000;
1724

    
1725
    timeKillEvent(data->timerId);
1726

    
1727
    data->timerId = timeSetEvent(1,
1728
                        data->period,
1729
                        host_alarm_handler,
1730
                        (DWORD)t,
1731
                        TIME_ONESHOT | TIME_PERIODIC);
1732

    
1733
    if (!data->timerId) {
1734
        perror("Failed to re-arm win32 alarm timer");
1735

    
1736
        timeEndPeriod(data->period);
1737
        CloseHandle(data->host_alarm);
1738
        exit(1);
1739
    }
1740
}
1741

    
1742
#endif /* _WIN32 */
1743

    
1744
static int init_timer_alarm(void)
1745
{
1746
    struct qemu_alarm_timer *t = NULL;
1747
    int i, err = -1;
1748

    
1749
#ifndef _WIN32
1750
    int fds[2];
1751

    
1752
    err = pipe(fds);
1753
    if (err == -1)
1754
        return -errno;
1755

    
1756
    err = fcntl_setfl(fds[0], O_NONBLOCK);
1757
    if (err < 0)
1758
        goto fail;
1759

    
1760
    err = fcntl_setfl(fds[1], O_NONBLOCK);
1761
    if (err < 0)
1762
        goto fail;
1763

    
1764
    alarm_timer_rfd = fds[0];
1765
    alarm_timer_wfd = fds[1];
1766
#endif
1767

    
1768
    for (i = 0; alarm_timers[i].name; i++) {
1769
        t = &alarm_timers[i];
1770

    
1771
        err = t->start(t);
1772
        if (!err)
1773
            break;
1774
    }
1775

    
1776
    if (err) {
1777
        err = -ENOENT;
1778
        goto fail;
1779
    }
1780

    
1781
#ifndef _WIN32
1782
    qemu_set_fd_handler2(alarm_timer_rfd, NULL,
1783
                         try_to_rearm_timer, NULL, t);
1784
#endif
1785

    
1786
    alarm_timer = t;
1787

    
1788
    return 0;
1789

    
1790
fail:
1791
#ifndef _WIN32
1792
    close(fds[0]);
1793
    close(fds[1]);
1794
#endif
1795
    return err;
1796
}
1797

    
1798
static void quit_timers(void)
1799
{
1800
    alarm_timer->stop(alarm_timer);
1801
    alarm_timer = NULL;
1802
}
1803

    
1804
/***********************************************************/
1805
/* host time/date access */
1806
void qemu_get_timedate(struct tm *tm, int offset)
1807
{
1808
    time_t ti;
1809
    struct tm *ret;
1810

    
1811
    time(&ti);
1812
    ti += offset;
1813
    if (rtc_date_offset == -1) {
1814
        if (rtc_utc)
1815
            ret = gmtime(&ti);
1816
        else
1817
            ret = localtime(&ti);
1818
    } else {
1819
        ti -= rtc_date_offset;
1820
        ret = gmtime(&ti);
1821
    }
1822

    
1823
    memcpy(tm, ret, sizeof(struct tm));
1824
}
1825

    
1826
int qemu_timedate_diff(struct tm *tm)
1827
{
1828
    time_t seconds;
1829

    
1830
    if (rtc_date_offset == -1)
1831
        if (rtc_utc)
1832
            seconds = mktimegm(tm);
1833
        else
1834
            seconds = mktime(tm);
1835
    else
1836
        seconds = mktimegm(tm) + rtc_date_offset;
1837

    
1838
    return seconds - time(NULL);
1839
}
1840

    
1841
#ifdef _WIN32
1842
static void socket_cleanup(void)
1843
{
1844
    WSACleanup();
1845
}
1846

    
1847
static int socket_init(void)
1848
{
1849
    WSADATA Data;
1850
    int ret, err;
1851

    
1852
    ret = WSAStartup(MAKEWORD(2,2), &Data);
1853
    if (ret != 0) {
1854
        err = WSAGetLastError();
1855
        fprintf(stderr, "WSAStartup: %d\n", err);
1856
        return -1;
1857
    }
1858
    atexit(socket_cleanup);
1859
    return 0;
1860
}
1861
#endif
1862

    
1863
const char *get_opt_name(char *buf, int buf_size, const char *p)
1864
{
1865
    char *q;
1866

    
1867
    q = buf;
1868
    while (*p != '\0' && *p != '=') {
1869
        if (q && (q - buf) < buf_size - 1)
1870
            *q++ = *p;
1871
        p++;
1872
    }
1873
    if (q)
1874
        *q = '\0';
1875

    
1876
    return p;
1877
}
1878

    
1879
const char *get_opt_value(char *buf, int buf_size, const char *p)
1880
{
1881
    char *q;
1882

    
1883
    q = buf;
1884
    while (*p != '\0') {
1885
        if (*p == ',') {
1886
            if (*(p + 1) != ',')
1887
                break;
1888
            p++;
1889
        }
1890
        if (q && (q - buf) < buf_size - 1)
1891
            *q++ = *p;
1892
        p++;
1893
    }
1894
    if (q)
1895
        *q = '\0';
1896

    
1897
    return p;
1898
}
1899

    
1900
int get_param_value(char *buf, int buf_size,
1901
                    const char *tag, const char *str)
1902
{
1903
    const char *p;
1904
    char option[128];
1905

    
1906
    p = str;
1907
    for(;;) {
1908
        p = get_opt_name(option, sizeof(option), p);
1909
        if (*p != '=')
1910
            break;
1911
        p++;
1912
        if (!strcmp(tag, option)) {
1913
            (void)get_opt_value(buf, buf_size, p);
1914
            return strlen(buf);
1915
        } else {
1916
            p = get_opt_value(NULL, 0, p);
1917
        }
1918
        if (*p != ',')
1919
            break;
1920
        p++;
1921
    }
1922
    return 0;
1923
}
1924

    
1925
int check_params(char *buf, int buf_size,
1926
                 const char * const *params, const char *str)
1927
{
1928
    const char *p;
1929
    int i;
1930

    
1931
    p = str;
1932
    for(;;) {
1933
        p = get_opt_name(buf, buf_size, p);
1934
        if (*p != '=')
1935
            return -1;
1936
        p++;
1937
        for(i = 0; params[i] != NULL; i++)
1938
            if (!strcmp(params[i], buf))
1939
                break;
1940
        if (params[i] == NULL)
1941
            return -1;
1942
        p = get_opt_value(NULL, 0, p);
1943
        if (*p != ',')
1944
            break;
1945
        p++;
1946
    }
1947
    return 0;
1948
}
1949

    
1950
/***********************************************************/
1951
/* Bluetooth support */
1952
static int nb_hcis;
1953
static int cur_hci;
1954
static struct HCIInfo *hci_table[MAX_NICS];
1955

    
1956
static struct bt_vlan_s {
1957
    struct bt_scatternet_s net;
1958
    int id;
1959
    struct bt_vlan_s *next;
1960
} *first_bt_vlan;
1961

    
1962
/* find or alloc a new bluetooth "VLAN" */
1963
static struct bt_scatternet_s *qemu_find_bt_vlan(int id)
1964
{
1965
    struct bt_vlan_s **pvlan, *vlan;
1966
    for (vlan = first_bt_vlan; vlan != NULL; vlan = vlan->next) {
1967
        if (vlan->id == id)
1968
            return &vlan->net;
1969
    }
1970
    vlan = qemu_mallocz(sizeof(struct bt_vlan_s));
1971
    vlan->id = id;
1972
    pvlan = &first_bt_vlan;
1973
    while (*pvlan != NULL)
1974
        pvlan = &(*pvlan)->next;
1975
    *pvlan = vlan;
1976
    return &vlan->net;
1977
}
1978

    
1979
static void null_hci_send(struct HCIInfo *hci, const uint8_t *data, int len)
1980
{
1981
}
1982

    
1983
static int null_hci_addr_set(struct HCIInfo *hci, const uint8_t *bd_addr)
1984
{
1985
    return -ENOTSUP;
1986
}
1987

    
1988
static struct HCIInfo null_hci = {
1989
    .cmd_send = null_hci_send,
1990
    .sco_send = null_hci_send,
1991
    .acl_send = null_hci_send,
1992
    .bdaddr_set = null_hci_addr_set,
1993
};
1994

    
1995
struct HCIInfo *qemu_next_hci(void)
1996
{
1997
    if (cur_hci == nb_hcis)
1998
        return &null_hci;
1999

    
2000
    return hci_table[cur_hci++];
2001
}
2002

    
2003
static struct HCIInfo *hci_init(const char *str)
2004
{
2005
    char *endp;
2006
    struct bt_scatternet_s *vlan = 0;
2007

    
2008
    if (!strcmp(str, "null"))
2009
        /* null */
2010
        return &null_hci;
2011
    else if (!strncmp(str, "host", 4) && (str[4] == '\0' || str[4] == ':'))
2012
        /* host[:hciN] */
2013
        return bt_host_hci(str[4] ? str + 5 : "hci0");
2014
    else if (!strncmp(str, "hci", 3)) {
2015
        /* hci[,vlan=n] */
2016
        if (str[3]) {
2017
            if (!strncmp(str + 3, ",vlan=", 6)) {
2018
                vlan = qemu_find_bt_vlan(strtol(str + 9, &endp, 0));
2019
                if (*endp)
2020
                    vlan = 0;
2021
            }
2022
        } else
2023
            vlan = qemu_find_bt_vlan(0);
2024
        if (vlan)
2025
           return bt_new_hci(vlan);
2026
    }
2027

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

    
2030
    return 0;
2031
}
2032

    
2033
static int bt_hci_parse(const char *str)
2034
{
2035
    struct HCIInfo *hci;
2036
    bdaddr_t bdaddr;
2037

    
2038
    if (nb_hcis >= MAX_NICS) {
2039
        fprintf(stderr, "qemu: Too many bluetooth HCIs (max %i).\n", MAX_NICS);
2040
        return -1;
2041
    }
2042

    
2043
    hci = hci_init(str);
2044
    if (!hci)
2045
        return -1;
2046

    
2047
    bdaddr.b[0] = 0x52;
2048
    bdaddr.b[1] = 0x54;
2049
    bdaddr.b[2] = 0x00;
2050
    bdaddr.b[3] = 0x12;
2051
    bdaddr.b[4] = 0x34;
2052
    bdaddr.b[5] = 0x56 + nb_hcis;
2053
    hci->bdaddr_set(hci, bdaddr.b);
2054

    
2055
    hci_table[nb_hcis++] = hci;
2056

    
2057
    return 0;
2058
}
2059

    
2060
static void bt_vhci_add(int vlan_id)
2061
{
2062
    struct bt_scatternet_s *vlan = qemu_find_bt_vlan(vlan_id);
2063

    
2064
    if (!vlan->slave)
2065
        fprintf(stderr, "qemu: warning: adding a VHCI to "
2066
                        "an empty scatternet %i\n", vlan_id);
2067

    
2068
    bt_vhci_init(bt_new_hci(vlan));
2069
}
2070

    
2071
static struct bt_device_s *bt_device_add(const char *opt)
2072
{
2073
    struct bt_scatternet_s *vlan;
2074
    int vlan_id = 0;
2075
    char *endp = strstr(opt, ",vlan=");
2076
    int len = (endp ? endp - opt : strlen(opt)) + 1;
2077
    char devname[10];
2078

    
2079
    pstrcpy(devname, MIN(sizeof(devname), len), opt);
2080

    
2081
    if (endp) {
2082
        vlan_id = strtol(endp + 6, &endp, 0);
2083
        if (*endp) {
2084
            fprintf(stderr, "qemu: unrecognised bluetooth vlan Id\n");
2085
            return 0;
2086
        }
2087
    }
2088

    
2089
    vlan = qemu_find_bt_vlan(vlan_id);
2090

    
2091
    if (!vlan->slave)
2092
        fprintf(stderr, "qemu: warning: adding a slave device to "
2093
                        "an empty scatternet %i\n", vlan_id);
2094

    
2095
    if (!strcmp(devname, "keyboard"))
2096
        return bt_keyboard_init(vlan);
2097

    
2098
    fprintf(stderr, "qemu: unsupported bluetooth device `%s'\n", devname);
2099
    return 0;
2100
}
2101

    
2102
static int bt_parse(const char *opt)
2103
{
2104
    const char *endp, *p;
2105
    int vlan;
2106

    
2107
    if (strstart(opt, "hci", &endp)) {
2108
        if (!*endp || *endp == ',') {
2109
            if (*endp)
2110
                if (!strstart(endp, ",vlan=", 0))
2111
                    opt = endp + 1;
2112

    
2113
            return bt_hci_parse(opt);
2114
       }
2115
    } else if (strstart(opt, "vhci", &endp)) {
2116
        if (!*endp || *endp == ',') {
2117
            if (*endp) {
2118
                if (strstart(endp, ",vlan=", &p)) {
2119
                    vlan = strtol(p, (char **) &endp, 0);
2120
                    if (*endp) {
2121
                        fprintf(stderr, "qemu: bad scatternet '%s'\n", p);
2122
                        return 1;
2123
                    }
2124
                } else {
2125
                    fprintf(stderr, "qemu: bad parameter '%s'\n", endp + 1);
2126
                    return 1;
2127
                }
2128
            } else
2129
                vlan = 0;
2130

    
2131
            bt_vhci_add(vlan);
2132
            return 0;
2133
        }
2134
    } else if (strstart(opt, "device:", &endp))
2135
        return !bt_device_add(endp);
2136

    
2137
    fprintf(stderr, "qemu: bad bluetooth parameter '%s'\n", opt);
2138
    return 1;
2139
}
2140

    
2141
/***********************************************************/
2142
/* QEMU Block devices */
2143

    
2144
#define HD_ALIAS "index=%d,media=disk"
2145
#define CDROM_ALIAS "index=2,media=cdrom"
2146
#define FD_ALIAS "index=%d,if=floppy"
2147
#define PFLASH_ALIAS "if=pflash"
2148
#define MTD_ALIAS "if=mtd"
2149
#define SD_ALIAS "index=0,if=sd"
2150

    
2151
static int drive_opt_get_free_idx(void)
2152
{
2153
    int index;
2154

    
2155
    for (index = 0; index < MAX_DRIVES; index++)
2156
        if (!drives_opt[index].used) {
2157
            drives_opt[index].used = 1;
2158
            return index;
2159
        }
2160

    
2161
    return -1;
2162
}
2163

    
2164
static int drive_get_free_idx(void)
2165
{
2166
    int index;
2167

    
2168
    for (index = 0; index < MAX_DRIVES; index++)
2169
        if (!drives_table[index].used) {
2170
            drives_table[index].used = 1;
2171
            return index;
2172
        }
2173

    
2174
    return -1;
2175
}
2176

    
2177
int drive_add(const char *file, const char *fmt, ...)
2178
{
2179
    va_list ap;
2180
    int index = drive_opt_get_free_idx();
2181

    
2182
    if (nb_drives_opt >= MAX_DRIVES || index == -1) {
2183
        fprintf(stderr, "qemu: too many drives\n");
2184
        return -1;
2185
    }
2186

    
2187
    drives_opt[index].file = file;
2188
    va_start(ap, fmt);
2189
    vsnprintf(drives_opt[index].opt,
2190
              sizeof(drives_opt[0].opt), fmt, ap);
2191
    va_end(ap);
2192

    
2193
    nb_drives_opt++;
2194
    return index;
2195
}
2196

    
2197
void drive_remove(int index)
2198
{
2199
    drives_opt[index].used = 0;
2200
    nb_drives_opt--;
2201
}
2202

    
2203
int drive_get_index(BlockInterfaceType type, int bus, int unit)
2204
{
2205
    int index;
2206

    
2207
    /* seek interface, bus and unit */
2208

    
2209
    for (index = 0; index < MAX_DRIVES; index++)
2210
        if (drives_table[index].type == type &&
2211
            drives_table[index].bus == bus &&
2212
            drives_table[index].unit == unit &&
2213
            drives_table[index].used)
2214
        return index;
2215

    
2216
    return -1;
2217
}
2218

    
2219
int drive_get_max_bus(BlockInterfaceType type)
2220
{
2221
    int max_bus;
2222
    int index;
2223

    
2224
    max_bus = -1;
2225
    for (index = 0; index < nb_drives; index++) {
2226
        if(drives_table[index].type == type &&
2227
           drives_table[index].bus > max_bus)
2228
            max_bus = drives_table[index].bus;
2229
    }
2230
    return max_bus;
2231
}
2232

    
2233
const char *drive_get_serial(BlockDriverState *bdrv)
2234
{
2235
    int index;
2236

    
2237
    for (index = 0; index < nb_drives; index++)
2238
        if (drives_table[index].bdrv == bdrv)
2239
            return drives_table[index].serial;
2240

    
2241
    return "\0";
2242
}
2243

    
2244
BlockInterfaceErrorAction drive_get_onerror(BlockDriverState *bdrv)
2245
{
2246
    int index;
2247

    
2248
    for (index = 0; index < nb_drives; index++)
2249
        if (drives_table[index].bdrv == bdrv)
2250
            return drives_table[index].onerror;
2251

    
2252
    return BLOCK_ERR_STOP_ENOSPC;
2253
}
2254

    
2255
static void bdrv_format_print(void *opaque, const char *name)
2256
{
2257
    fprintf(stderr, " %s", name);
2258
}
2259

    
2260
void drive_uninit(BlockDriverState *bdrv)
2261
{
2262
    int i;
2263

    
2264
    for (i = 0; i < MAX_DRIVES; i++)
2265
        if (drives_table[i].bdrv == bdrv) {
2266
            drives_table[i].bdrv = NULL;
2267
            drives_table[i].used = 0;
2268
            drive_remove(drives_table[i].drive_opt_idx);
2269
            nb_drives--;
2270
            break;
2271
        }
2272
}
2273

    
2274
int drive_init(struct drive_opt *arg, int snapshot, void *opaque)
2275
{
2276
    char buf[128];
2277
    char file[1024];
2278
    char devname[128];
2279
    char serial[21];
2280
    const char *mediastr = "";
2281
    BlockInterfaceType type;
2282
    enum { MEDIA_DISK, MEDIA_CDROM } media;
2283
    int bus_id, unit_id;
2284
    int cyls, heads, secs, translation;
2285
    BlockDriverState *bdrv;
2286
    BlockDriver *drv = NULL;
2287
    QEMUMachine *machine = opaque;
2288
    int max_devs;
2289
    int index;
2290
    int cache;
2291
    int bdrv_flags, onerror;
2292
    int drives_table_idx;
2293
    char *str = arg->opt;
2294
    static const char * const params[] = { "bus", "unit", "if", "index",
2295
                                           "cyls", "heads", "secs", "trans",
2296
                                           "media", "snapshot", "file",
2297
                                           "cache", "format", "serial", "werror",
2298
                                           NULL };
2299

    
2300
    if (check_params(buf, sizeof(buf), params, str) < 0) {
2301
         fprintf(stderr, "qemu: unknown parameter '%s' in '%s'\n",
2302
                         buf, str);
2303
         return -1;
2304
    }
2305

    
2306
    file[0] = 0;
2307
    cyls = heads = secs = 0;
2308
    bus_id = 0;
2309
    unit_id = -1;
2310
    translation = BIOS_ATA_TRANSLATION_AUTO;
2311
    index = -1;
2312
    cache = 3;
2313

    
2314
    if (machine->use_scsi) {
2315
        type = IF_SCSI;
2316
        max_devs = MAX_SCSI_DEVS;
2317
        pstrcpy(devname, sizeof(devname), "scsi");
2318
    } else {
2319
        type = IF_IDE;
2320
        max_devs = MAX_IDE_DEVS;
2321
        pstrcpy(devname, sizeof(devname), "ide");
2322
    }
2323
    media = MEDIA_DISK;
2324

    
2325
    /* extract parameters */
2326

    
2327
    if (get_param_value(buf, sizeof(buf), "bus", str)) {
2328
        bus_id = strtol(buf, NULL, 0);
2329
        if (bus_id < 0) {
2330
            fprintf(stderr, "qemu: '%s' invalid bus id\n", str);
2331
            return -1;
2332
        }
2333
    }
2334

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

    
2343
    if (get_param_value(buf, sizeof(buf), "if", str)) {
2344
        pstrcpy(devname, sizeof(devname), buf);
2345
        if (!strcmp(buf, "ide")) {
2346
            type = IF_IDE;
2347
            max_devs = MAX_IDE_DEVS;
2348
        } else if (!strcmp(buf, "scsi")) {
2349
            type = IF_SCSI;
2350
            max_devs = MAX_SCSI_DEVS;
2351
        } else if (!strcmp(buf, "floppy")) {
2352
            type = IF_FLOPPY;
2353
            max_devs = 0;
2354
        } else if (!strcmp(buf, "pflash")) {
2355
            type = IF_PFLASH;
2356
            max_devs = 0;
2357
        } else if (!strcmp(buf, "mtd")) {
2358
            type = IF_MTD;
2359
            max_devs = 0;
2360
        } else if (!strcmp(buf, "sd")) {
2361
            type = IF_SD;
2362
            max_devs = 0;
2363
        } else if (!strcmp(buf, "virtio")) {
2364
            type = IF_VIRTIO;
2365
            max_devs = 0;
2366
        } else {
2367
            fprintf(stderr, "qemu: '%s' unsupported bus type '%s'\n", str, buf);
2368
            return -1;
2369
        }
2370
    }
2371

    
2372
    if (get_param_value(buf, sizeof(buf), "index", str)) {
2373
        index = strtol(buf, NULL, 0);
2374
        if (index < 0) {
2375
            fprintf(stderr, "qemu: '%s' invalid index\n", str);
2376
            return -1;
2377
        }
2378
    }
2379

    
2380
    if (get_param_value(buf, sizeof(buf), "cyls", str)) {
2381
        cyls = strtol(buf, NULL, 0);
2382
    }
2383

    
2384
    if (get_param_value(buf, sizeof(buf), "heads", str)) {
2385
        heads = strtol(buf, NULL, 0);
2386
    }
2387

    
2388
    if (get_param_value(buf, sizeof(buf), "secs", str)) {
2389
        secs = strtol(buf, NULL, 0);
2390
    }
2391

    
2392
    if (cyls || heads || secs) {
2393
        if (cyls < 1 || cyls > 16383) {
2394
            fprintf(stderr, "qemu: '%s' invalid physical cyls number\n", str);
2395
            return -1;
2396
        }
2397
        if (heads < 1 || heads > 16) {
2398
            fprintf(stderr, "qemu: '%s' invalid physical heads number\n", str);
2399
            return -1;
2400
        }
2401
        if (secs < 1 || secs > 63) {
2402
            fprintf(stderr, "qemu: '%s' invalid physical secs number\n", str);
2403
            return -1;
2404
        }
2405
    }
2406

    
2407
    if (get_param_value(buf, sizeof(buf), "trans", str)) {
2408
        if (!cyls) {
2409
            fprintf(stderr,
2410
                    "qemu: '%s' trans must be used with cyls,heads and secs\n",
2411
                    str);
2412
            return -1;
2413
        }
2414
        if (!strcmp(buf, "none"))
2415
            translation = BIOS_ATA_TRANSLATION_NONE;
2416
        else if (!strcmp(buf, "lba"))
2417
            translation = BIOS_ATA_TRANSLATION_LBA;
2418
        else if (!strcmp(buf, "auto"))
2419
            translation = BIOS_ATA_TRANSLATION_AUTO;
2420
        else {
2421
            fprintf(stderr, "qemu: '%s' invalid translation type\n", str);
2422
            return -1;
2423
        }
2424
    }
2425

    
2426
    if (get_param_value(buf, sizeof(buf), "media", str)) {
2427
        if (!strcmp(buf, "disk")) {
2428
            media = MEDIA_DISK;
2429
        } else if (!strcmp(buf, "cdrom")) {
2430
            if (cyls || secs || heads) {
2431
                fprintf(stderr,
2432
                        "qemu: '%s' invalid physical CHS format\n", str);
2433
                return -1;
2434
            }
2435
            media = MEDIA_CDROM;
2436
        } else {
2437
            fprintf(stderr, "qemu: '%s' invalid media\n", str);
2438
            return -1;
2439
        }
2440
    }
2441

    
2442
    if (get_param_value(buf, sizeof(buf), "snapshot", str)) {
2443
        if (!strcmp(buf, "on"))
2444
            snapshot = 1;
2445
        else if (!strcmp(buf, "off"))
2446
            snapshot = 0;
2447
        else {
2448
            fprintf(stderr, "qemu: '%s' invalid snapshot option\n", str);
2449
            return -1;
2450
        }
2451
    }
2452

    
2453
    if (get_param_value(buf, sizeof(buf), "cache", str)) {
2454
        if (!strcmp(buf, "off") || !strcmp(buf, "none"))
2455
            cache = 0;
2456
        else if (!strcmp(buf, "writethrough"))
2457
            cache = 1;
2458
        else if (!strcmp(buf, "writeback"))
2459
            cache = 2;
2460
        else {
2461
           fprintf(stderr, "qemu: invalid cache option\n");
2462
           return -1;
2463
        }
2464
    }
2465

    
2466
    if (get_param_value(buf, sizeof(buf), "format", str)) {
2467
       if (strcmp(buf, "?") == 0) {
2468
            fprintf(stderr, "qemu: Supported formats:");
2469
            bdrv_iterate_format(bdrv_format_print, NULL);
2470
            fprintf(stderr, "\n");
2471
            return -1;
2472
        }
2473
        drv = bdrv_find_format(buf);
2474
        if (!drv) {
2475
            fprintf(stderr, "qemu: '%s' invalid format\n", buf);
2476
            return -1;
2477
        }
2478
    }
2479

    
2480
    if (arg->file == NULL)
2481
        get_param_value(file, sizeof(file), "file", str);
2482
    else
2483
        pstrcpy(file, sizeof(file), arg->file);
2484

    
2485
    if (!get_param_value(serial, sizeof(serial), "serial", str))
2486
            memset(serial, 0,  sizeof(serial));
2487

    
2488
    onerror = BLOCK_ERR_STOP_ENOSPC;
2489
    if (get_param_value(buf, sizeof(serial), "werror", str)) {
2490
        if (type != IF_IDE && type != IF_SCSI && type != IF_VIRTIO) {
2491
            fprintf(stderr, "werror is no supported by this format\n");
2492
            return -1;
2493
        }
2494
        if (!strcmp(buf, "ignore"))
2495
            onerror = BLOCK_ERR_IGNORE;
2496
        else if (!strcmp(buf, "enospc"))
2497
            onerror = BLOCK_ERR_STOP_ENOSPC;
2498
        else if (!strcmp(buf, "stop"))
2499
            onerror = BLOCK_ERR_STOP_ANY;
2500
        else if (!strcmp(buf, "report"))
2501
            onerror = BLOCK_ERR_REPORT;
2502
        else {
2503
            fprintf(stderr, "qemu: '%s' invalid write error action\n", buf);
2504
            return -1;
2505
        }
2506
    }
2507

    
2508
    /* compute bus and unit according index */
2509

    
2510
    if (index != -1) {
2511
        if (bus_id != 0 || unit_id != -1) {
2512
            fprintf(stderr,
2513
                    "qemu: '%s' index cannot be used with bus and unit\n", str);
2514
            return -1;
2515
        }
2516
        if (max_devs == 0)
2517
        {
2518
            unit_id = index;
2519
            bus_id = 0;
2520
        } else {
2521
            unit_id = index % max_devs;
2522
            bus_id = index / max_devs;
2523
        }
2524
    }
2525

    
2526
    /* if user doesn't specify a unit_id,
2527
     * try to find the first free
2528
     */
2529

    
2530
    if (unit_id == -1) {
2531
       unit_id = 0;
2532
       while (drive_get_index(type, bus_id, unit_id) != -1) {
2533
           unit_id++;
2534
           if (max_devs && unit_id >= max_devs) {
2535
               unit_id -= max_devs;
2536
               bus_id++;
2537
           }
2538
       }
2539
    }
2540

    
2541
    /* check unit id */
2542

    
2543
    if (max_devs && unit_id >= max_devs) {
2544
        fprintf(stderr, "qemu: '%s' unit %d too big (max is %d)\n",
2545
                        str, unit_id, max_devs - 1);
2546
        return -1;
2547
    }
2548

    
2549
    /*
2550
     * ignore multiple definitions
2551
     */
2552

    
2553
    if (drive_get_index(type, bus_id, unit_id) != -1)
2554
        return -2;
2555

    
2556
    /* init */
2557

    
2558
    if (type == IF_IDE || type == IF_SCSI)
2559
        mediastr = (media == MEDIA_CDROM) ? "-cd" : "-hd";
2560
    if (max_devs)
2561
        snprintf(buf, sizeof(buf), "%s%i%s%i",
2562
                 devname, bus_id, mediastr, unit_id);
2563
    else
2564
        snprintf(buf, sizeof(buf), "%s%s%i",
2565
                 devname, mediastr, unit_id);
2566
    bdrv = bdrv_new(buf);
2567
    drives_table_idx = drive_get_free_idx();
2568
    drives_table[drives_table_idx].bdrv = bdrv;
2569
    drives_table[drives_table_idx].type = type;
2570
    drives_table[drives_table_idx].bus = bus_id;
2571
    drives_table[drives_table_idx].unit = unit_id;
2572
    drives_table[drives_table_idx].onerror = onerror;
2573
    drives_table[drives_table_idx].drive_opt_idx = arg - drives_opt;
2574
    strncpy(drives_table[nb_drives].serial, serial, sizeof(serial));
2575
    nb_drives++;
2576

    
2577
    switch(type) {
2578
    case IF_IDE:
2579
    case IF_SCSI:
2580
        switch(media) {
2581
        case MEDIA_DISK:
2582
            if (cyls != 0) {
2583
                bdrv_set_geometry_hint(bdrv, cyls, heads, secs);
2584
                bdrv_set_translation_hint(bdrv, translation);
2585
            }
2586
            break;
2587
        case MEDIA_CDROM:
2588
            bdrv_set_type_hint(bdrv, BDRV_TYPE_CDROM);
2589
            break;
2590
        }
2591
        break;
2592
    case IF_SD:
2593
        /* FIXME: This isn't really a floppy, but it's a reasonable
2594
           approximation.  */
2595
    case IF_FLOPPY:
2596
        bdrv_set_type_hint(bdrv, BDRV_TYPE_FLOPPY);
2597
        break;
2598
    case IF_PFLASH:
2599
    case IF_MTD:
2600
    case IF_VIRTIO:
2601
        break;
2602
    }
2603
    if (!file[0])
2604
        return -2;
2605
    bdrv_flags = 0;
2606
    if (snapshot) {
2607
        bdrv_flags |= BDRV_O_SNAPSHOT;
2608
        cache = 2; /* always use write-back with snapshot */
2609
    }
2610
    if (cache == 0) /* no caching */
2611
        bdrv_flags |= BDRV_O_NOCACHE;
2612
    else if (cache == 2) /* write-back */
2613
        bdrv_flags |= BDRV_O_CACHE_WB;
2614
    else if (cache == 3) /* not specified */
2615
        bdrv_flags |= BDRV_O_CACHE_DEF;
2616
    if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0) {
2617
        fprintf(stderr, "qemu: could not open disk image %s\n",
2618
                        file);
2619
        return -1;
2620
    }
2621
    if (bdrv_key_required(bdrv))
2622
        autostart = 0;
2623
    return drives_table_idx;
2624
}
2625

    
2626
/***********************************************************/
2627
/* USB devices */
2628

    
2629
static USBPort *used_usb_ports;
2630
static USBPort *free_usb_ports;
2631

    
2632
/* ??? Maybe change this to register a hub to keep track of the topology.  */
2633
void qemu_register_usb_port(USBPort *port, void *opaque, int index,
2634
                            usb_attachfn attach)
2635
{
2636
    port->opaque = opaque;
2637
    port->index = index;
2638
    port->attach = attach;
2639
    port->next = free_usb_ports;
2640
    free_usb_ports = port;
2641
}
2642

    
2643
int usb_device_add_dev(USBDevice *dev)
2644
{
2645
    USBPort *port;
2646

    
2647
    /* Find a USB port to add the device to.  */
2648
    port = free_usb_ports;
2649
    if (!port->next) {
2650
        USBDevice *hub;
2651

    
2652
        /* Create a new hub and chain it on.  */
2653
        free_usb_ports = NULL;
2654
        port->next = used_usb_ports;
2655
        used_usb_ports = port;
2656

    
2657
        hub = usb_hub_init(VM_USB_HUB_SIZE);
2658
        usb_attach(port, hub);
2659
        port = free_usb_ports;
2660
    }
2661

    
2662
    free_usb_ports = port->next;
2663
    port->next = used_usb_ports;
2664
    used_usb_ports = port;
2665
    usb_attach(port, dev);
2666
    return 0;
2667
}
2668

    
2669
static void usb_msd_password_cb(void *opaque, int err)
2670
{
2671
    USBDevice *dev = opaque;
2672

    
2673
    if (!err)
2674
        usb_device_add_dev(dev);
2675
    else
2676
        dev->handle_destroy(dev);
2677
}
2678

    
2679
static int usb_device_add(const char *devname, int is_hotplug)
2680
{
2681
    const char *p;
2682
    USBDevice *dev;
2683

    
2684
    if (!free_usb_ports)
2685
        return -1;
2686

    
2687
    if (strstart(devname, "host:", &p)) {
2688
        dev = usb_host_device_open(p);
2689
    } else if (!strcmp(devname, "mouse")) {
2690
        dev = usb_mouse_init();
2691
    } else if (!strcmp(devname, "tablet")) {
2692
        dev = usb_tablet_init();
2693
    } else if (!strcmp(devname, "keyboard")) {
2694
        dev = usb_keyboard_init();
2695
    } else if (strstart(devname, "disk:", &p)) {
2696
        BlockDriverState *bs;
2697

    
2698
        dev = usb_msd_init(p);
2699
        if (!dev)
2700
            return -1;
2701
        bs = usb_msd_get_bdrv(dev);
2702
        if (bdrv_key_required(bs)) {
2703
            autostart = 0;
2704
            if (is_hotplug) {
2705
                monitor_read_bdrv_key_start(cur_mon, bs, usb_msd_password_cb,
2706
                                            dev);
2707
                return 0;
2708
            }
2709
        }
2710
    } else if (!strcmp(devname, "wacom-tablet")) {
2711
        dev = usb_wacom_init();
2712
    } else if (strstart(devname, "serial:", &p)) {
2713
        dev = usb_serial_init(p);
2714
#ifdef CONFIG_BRLAPI
2715
    } else if (!strcmp(devname, "braille")) {
2716
        dev = usb_baum_init();
2717
#endif
2718
    } else if (strstart(devname, "net:", &p)) {
2719
        int nic = nb_nics;
2720

    
2721
        if (net_client_init("nic", p) < 0)
2722
            return -1;
2723
        nd_table[nic].model = "usb";
2724
        dev = usb_net_init(&nd_table[nic]);
2725
    } else if (!strcmp(devname, "bt") || strstart(devname, "bt:", &p)) {
2726
        dev = usb_bt_init(devname[2] ? hci_init(p) :
2727
                        bt_new_hci(qemu_find_bt_vlan(0)));
2728
    } else {
2729
        return -1;
2730
    }
2731
    if (!dev)
2732
        return -1;
2733

    
2734
    return usb_device_add_dev(dev);
2735
}
2736

    
2737
int usb_device_del_addr(int bus_num, int addr)
2738
{
2739
    USBPort *port;
2740
    USBPort **lastp;
2741
    USBDevice *dev;
2742

    
2743
    if (!used_usb_ports)
2744
        return -1;
2745

    
2746
    if (bus_num != 0)
2747
        return -1;
2748

    
2749
    lastp = &used_usb_ports;
2750
    port = used_usb_ports;
2751
    while (port && port->dev->addr != addr) {
2752
        lastp = &port->next;
2753
        port = port->next;
2754
    }
2755

    
2756
    if (!port)
2757
        return -1;
2758

    
2759
    dev = port->dev;
2760
    *lastp = port->next;
2761
    usb_attach(port, NULL);
2762
    dev->handle_destroy(dev);
2763
    port->next = free_usb_ports;
2764
    free_usb_ports = port;
2765
    return 0;
2766
}
2767

    
2768
static int usb_device_del(const char *devname)
2769
{
2770
    int bus_num, addr;
2771
    const char *p;
2772

    
2773
    if (strstart(devname, "host:", &p))
2774
        return usb_host_device_close(p);
2775

    
2776
    if (!used_usb_ports)
2777
        return -1;
2778

    
2779
    p = strchr(devname, '.');
2780
    if (!p)
2781
        return -1;
2782
    bus_num = strtoul(devname, NULL, 0);
2783
    addr = strtoul(p + 1, NULL, 0);
2784

    
2785
    return usb_device_del_addr(bus_num, addr);
2786
}
2787

    
2788
void do_usb_add(Monitor *mon, const char *devname)
2789
{
2790
    usb_device_add(devname, 1);
2791
}
2792

    
2793
void do_usb_del(Monitor *mon, const char *devname)
2794
{
2795
    usb_device_del(devname);
2796
}
2797

    
2798
void usb_info(Monitor *mon)
2799
{
2800
    USBDevice *dev;
2801
    USBPort *port;
2802
    const char *speed_str;
2803

    
2804
    if (!usb_enabled) {
2805
        monitor_printf(mon, "USB support not enabled\n");
2806
        return;
2807
    }
2808

    
2809
    for (port = used_usb_ports; port; port = port->next) {
2810
        dev = port->dev;
2811
        if (!dev)
2812
            continue;
2813
        switch(dev->speed) {
2814
        case USB_SPEED_LOW:
2815
            speed_str = "1.5";
2816
            break;
2817
        case USB_SPEED_FULL:
2818
            speed_str = "12";
2819
            break;
2820
        case USB_SPEED_HIGH:
2821
            speed_str = "480";
2822
            break;
2823
        default:
2824
            speed_str = "?";
2825
            break;
2826
        }
2827
        monitor_printf(mon, "  Device %d.%d, Speed %s Mb/s, Product %s\n",
2828
                       0, dev->addr, speed_str, dev->devname);
2829
    }
2830
}
2831

    
2832
/***********************************************************/
2833
/* PCMCIA/Cardbus */
2834

    
2835
static struct pcmcia_socket_entry_s {
2836
    struct pcmcia_socket_s *socket;
2837
    struct pcmcia_socket_entry_s *next;
2838
} *pcmcia_sockets = 0;
2839

    
2840
void pcmcia_socket_register(struct pcmcia_socket_s *socket)
2841
{
2842
    struct pcmcia_socket_entry_s *entry;
2843

    
2844
    entry = qemu_malloc(sizeof(struct pcmcia_socket_entry_s));
2845
    entry->socket = socket;
2846
    entry->next = pcmcia_sockets;
2847
    pcmcia_sockets = entry;
2848
}
2849

    
2850
void pcmcia_socket_unregister(struct pcmcia_socket_s *socket)
2851
{
2852
    struct pcmcia_socket_entry_s *entry, **ptr;
2853

    
2854
    ptr = &pcmcia_sockets;
2855
    for (entry = *ptr; entry; ptr = &entry->next, entry = *ptr)
2856
        if (entry->socket == socket) {
2857
            *ptr = entry->next;
2858
            qemu_free(entry);
2859
        }
2860
}
2861

    
2862
void pcmcia_info(Monitor *mon)
2863
{
2864
    struct pcmcia_socket_entry_s *iter;
2865

    
2866
    if (!pcmcia_sockets)
2867
        monitor_printf(mon, "No PCMCIA sockets\n");
2868

    
2869
    for (iter = pcmcia_sockets; iter; iter = iter->next)
2870
        monitor_printf(mon, "%s: %s\n", iter->socket->slot_string,
2871
                       iter->socket->attached ? iter->socket->card_string :
2872
                       "Empty");
2873
}
2874

    
2875
/***********************************************************/
2876
/* register display */
2877

    
2878
struct DisplayAllocator default_allocator = {
2879
    defaultallocator_create_displaysurface,
2880
    defaultallocator_resize_displaysurface,
2881
    defaultallocator_free_displaysurface
2882
};
2883

    
2884
void register_displaystate(DisplayState *ds)
2885
{
2886
    DisplayState **s;
2887
    s = &display_state;
2888
    while (*s != NULL)
2889
        s = &(*s)->next;
2890
    ds->next = NULL;
2891
    *s = ds;
2892
}
2893

    
2894
DisplayState *get_displaystate(void)
2895
{
2896
    return display_state;
2897
}
2898

    
2899
DisplayAllocator *register_displayallocator(DisplayState *ds, DisplayAllocator *da)
2900
{
2901
    if(ds->allocator ==  &default_allocator) ds->allocator = da;
2902
    return ds->allocator;
2903
}
2904

    
2905
/* dumb display */
2906

    
2907
static void dumb_display_init(void)
2908
{
2909
    DisplayState *ds = qemu_mallocz(sizeof(DisplayState));
2910
    ds->allocator = &default_allocator;
2911
    ds->surface = qemu_create_displaysurface(ds, 640, 480);
2912
    register_displaystate(ds);
2913
}
2914

    
2915
/***********************************************************/
2916
/* I/O handling */
2917

    
2918
typedef struct IOHandlerRecord {
2919
    int fd;
2920
    IOCanRWHandler *fd_read_poll;
2921
    IOHandler *fd_read;
2922
    IOHandler *fd_write;
2923
    int deleted;
2924
    void *opaque;
2925
    /* temporary data */
2926
    struct pollfd *ufd;
2927
    struct IOHandlerRecord *next;
2928
} IOHandlerRecord;
2929

    
2930
static IOHandlerRecord *first_io_handler;
2931

    
2932
/* XXX: fd_read_poll should be suppressed, but an API change is
2933
   necessary in the character devices to suppress fd_can_read(). */
2934
int qemu_set_fd_handler2(int fd,
2935
                         IOCanRWHandler *fd_read_poll,
2936
                         IOHandler *fd_read,
2937
                         IOHandler *fd_write,
2938
                         void *opaque)
2939
{
2940
    IOHandlerRecord **pioh, *ioh;
2941

    
2942
    if (!fd_read && !fd_write) {
2943
        pioh = &first_io_handler;
2944
        for(;;) {
2945
            ioh = *pioh;
2946
            if (ioh == NULL)
2947
                break;
2948
            if (ioh->fd == fd) {
2949
                ioh->deleted = 1;
2950
                break;
2951
            }
2952
            pioh = &ioh->next;
2953
        }
2954
    } else {
2955
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
2956
            if (ioh->fd == fd)
2957
                goto found;
2958
        }
2959
        ioh = qemu_mallocz(sizeof(IOHandlerRecord));
2960
        ioh->next = first_io_handler;
2961
        first_io_handler = ioh;
2962
    found:
2963
        ioh->fd = fd;
2964
        ioh->fd_read_poll = fd_read_poll;
2965
        ioh->fd_read = fd_read;
2966
        ioh->fd_write = fd_write;
2967
        ioh->opaque = opaque;
2968
        ioh->deleted = 0;
2969
    }
2970
    return 0;
2971
}
2972

    
2973
int qemu_set_fd_handler(int fd,
2974
                        IOHandler *fd_read,
2975
                        IOHandler *fd_write,
2976
                        void *opaque)
2977
{
2978
    return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
2979
}
2980

    
2981
#ifdef _WIN32
2982
/***********************************************************/
2983
/* Polling handling */
2984

    
2985
typedef struct PollingEntry {
2986
    PollingFunc *func;
2987
    void *opaque;
2988
    struct PollingEntry *next;
2989
} PollingEntry;
2990

    
2991
static PollingEntry *first_polling_entry;
2992

    
2993
int qemu_add_polling_cb(PollingFunc *func, void *opaque)
2994
{
2995
    PollingEntry **ppe, *pe;
2996
    pe = qemu_mallocz(sizeof(PollingEntry));
2997
    pe->func = func;
2998
    pe->opaque = opaque;
2999
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next);
3000
    *ppe = pe;
3001
    return 0;
3002
}
3003

    
3004
void qemu_del_polling_cb(PollingFunc *func, void *opaque)
3005
{
3006
    PollingEntry **ppe, *pe;
3007
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next) {
3008
        pe = *ppe;
3009
        if (pe->func == func && pe->opaque == opaque) {
3010
            *ppe = pe->next;
3011
            qemu_free(pe);
3012
            break;
3013
        }
3014
    }
3015
}
3016

    
3017
/***********************************************************/
3018
/* Wait objects support */
3019
typedef struct WaitObjects {
3020
    int num;
3021
    HANDLE events[MAXIMUM_WAIT_OBJECTS + 1];
3022
    WaitObjectFunc *func[MAXIMUM_WAIT_OBJECTS + 1];
3023
    void *opaque[MAXIMUM_WAIT_OBJECTS + 1];
3024
} WaitObjects;
3025

    
3026
static WaitObjects wait_objects = {0};
3027

    
3028
int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
3029
{
3030
    WaitObjects *w = &wait_objects;
3031

    
3032
    if (w->num >= MAXIMUM_WAIT_OBJECTS)
3033
        return -1;
3034
    w->events[w->num] = handle;
3035
    w->func[w->num] = func;
3036
    w->opaque[w->num] = opaque;
3037
    w->num++;
3038
    return 0;
3039
}
3040

    
3041
void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
3042
{
3043
    int i, found;
3044
    WaitObjects *w = &wait_objects;
3045

    
3046
    found = 0;
3047
    for (i = 0; i < w->num; i++) {
3048
        if (w->events[i] == handle)
3049
            found = 1;
3050
        if (found) {
3051
            w->events[i] = w->events[i + 1];
3052
            w->func[i] = w->func[i + 1];
3053
            w->opaque[i] = w->opaque[i + 1];
3054
        }
3055
    }
3056
    if (found)
3057
        w->num--;
3058
}
3059
#endif
3060

    
3061
/***********************************************************/
3062
/* ram save/restore */
3063

    
3064
static int ram_get_page(QEMUFile *f, uint8_t *buf, int len)
3065
{
3066
    int v;
3067

    
3068
    v = qemu_get_byte(f);
3069
    switch(v) {
3070
    case 0:
3071
        if (qemu_get_buffer(f, buf, len) != len)
3072
            return -EIO;
3073
        break;
3074
    case 1:
3075
        v = qemu_get_byte(f);
3076
        memset(buf, v, len);
3077
        break;
3078
    default:
3079
        return -EINVAL;
3080
    }
3081

    
3082
    if (qemu_file_has_error(f))
3083
        return -EIO;
3084

    
3085
    return 0;
3086
}
3087

    
3088
static int ram_load_v1(QEMUFile *f, void *opaque)
3089
{
3090
    int ret;
3091
    ram_addr_t i;
3092

    
3093
    if (qemu_get_be32(f) != phys_ram_size)
3094
        return -EINVAL;
3095
    for(i = 0; i < phys_ram_size; i+= TARGET_PAGE_SIZE) {
3096
        ret = ram_get_page(f, phys_ram_base + i, TARGET_PAGE_SIZE);
3097
        if (ret)
3098
            return ret;
3099
    }
3100
    return 0;
3101
}
3102

    
3103
#define BDRV_HASH_BLOCK_SIZE 1024
3104
#define IOBUF_SIZE 4096
3105
#define RAM_CBLOCK_MAGIC 0xfabe
3106

    
3107
typedef struct RamDecompressState {
3108
    z_stream zstream;
3109
    QEMUFile *f;
3110
    uint8_t buf[IOBUF_SIZE];
3111
} RamDecompressState;
3112

    
3113
static int ram_decompress_open(RamDecompressState *s, QEMUFile *f)
3114
{
3115
    int ret;
3116
    memset(s, 0, sizeof(*s));
3117
    s->f = f;
3118
    ret = inflateInit(&s->zstream);
3119
    if (ret != Z_OK)
3120
        return -1;
3121
    return 0;
3122
}
3123

    
3124
static int ram_decompress_buf(RamDecompressState *s, uint8_t *buf, int len)
3125
{
3126
    int ret, clen;
3127

    
3128
    s->zstream.avail_out = len;
3129
    s->zstream.next_out = buf;
3130
    while (s->zstream.avail_out > 0) {
3131
        if (s->zstream.avail_in == 0) {
3132
            if (qemu_get_be16(s->f) != RAM_CBLOCK_MAGIC)
3133
                return -1;
3134
            clen = qemu_get_be16(s->f);
3135
            if (clen > IOBUF_SIZE)
3136
                return -1;
3137
            qemu_get_buffer(s->f, s->buf, clen);
3138
            s->zstream.avail_in = clen;
3139
            s->zstream.next_in = s->buf;
3140
        }
3141
        ret = inflate(&s->zstream, Z_PARTIAL_FLUSH);
3142
        if (ret != Z_OK && ret != Z_STREAM_END) {
3143
            return -1;
3144
        }
3145
    }
3146
    return 0;
3147
}
3148

    
3149
static void ram_decompress_close(RamDecompressState *s)
3150
{
3151
    inflateEnd(&s->zstream);
3152
}
3153

    
3154
#define RAM_SAVE_FLAG_FULL        0x01
3155
#define RAM_SAVE_FLAG_COMPRESS        0x02
3156
#define RAM_SAVE_FLAG_MEM_SIZE        0x04
3157
#define RAM_SAVE_FLAG_PAGE        0x08
3158
#define RAM_SAVE_FLAG_EOS        0x10
3159

    
3160
static int is_dup_page(uint8_t *page, uint8_t ch)
3161
{
3162
    uint32_t val = ch << 24 | ch << 16 | ch << 8 | ch;
3163
    uint32_t *array = (uint32_t *)page;
3164
    int i;
3165

    
3166
    for (i = 0; i < (TARGET_PAGE_SIZE / 4); i++) {
3167
        if (array[i] != val)
3168
            return 0;
3169
    }
3170

    
3171
    return 1;
3172
}
3173

    
3174
static int ram_save_block(QEMUFile *f)
3175
{
3176
    static ram_addr_t current_addr = 0;
3177
    ram_addr_t saved_addr = current_addr;
3178
    ram_addr_t addr = 0;
3179
    int found = 0;
3180

    
3181
    while (addr < phys_ram_size) {
3182
        if (cpu_physical_memory_get_dirty(current_addr, MIGRATION_DIRTY_FLAG)) {
3183
            uint8_t ch;
3184

    
3185
            cpu_physical_memory_reset_dirty(current_addr,
3186
                                            current_addr + TARGET_PAGE_SIZE,
3187
                                            MIGRATION_DIRTY_FLAG);
3188

    
3189
            ch = *(phys_ram_base + current_addr);
3190

    
3191
            if (is_dup_page(phys_ram_base + current_addr, ch)) {
3192
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_COMPRESS);
3193
                qemu_put_byte(f, ch);
3194
            } else {
3195
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_PAGE);
3196
                qemu_put_buffer(f, phys_ram_base + current_addr, TARGET_PAGE_SIZE);
3197
            }
3198

    
3199
            found = 1;
3200
            break;
3201
        }
3202
        addr += TARGET_PAGE_SIZE;
3203
        current_addr = (saved_addr + addr) % phys_ram_size;
3204
    }
3205

    
3206
    return found;
3207
}
3208

    
3209
static ram_addr_t ram_save_threshold = 10;
3210

    
3211
static ram_addr_t ram_save_remaining(void)
3212
{
3213
    ram_addr_t addr;
3214
    ram_addr_t count = 0;
3215

    
3216
    for (addr = 0; addr < phys_ram_size; addr += TARGET_PAGE_SIZE) {
3217
        if (cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3218
            count++;
3219
    }
3220

    
3221
    return count;
3222
}
3223

    
3224
static int ram_save_live(QEMUFile *f, int stage, void *opaque)
3225
{
3226
    ram_addr_t addr;
3227

    
3228
    if (stage == 1) {
3229
        /* Make sure all dirty bits are set */
3230
        for (addr = 0; addr < phys_ram_size; addr += TARGET_PAGE_SIZE) {
3231
            if (!cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3232
                cpu_physical_memory_set_dirty(addr);
3233
        }
3234
        
3235
        /* Enable dirty memory tracking */
3236
        cpu_physical_memory_set_dirty_tracking(1);
3237

    
3238
        qemu_put_be64(f, phys_ram_size | RAM_SAVE_FLAG_MEM_SIZE);
3239
    }
3240

    
3241
    while (!qemu_file_rate_limit(f)) {
3242
        int ret;
3243

    
3244
        ret = ram_save_block(f);
3245
        if (ret == 0) /* no more blocks */
3246
            break;
3247
    }
3248

    
3249
    /* try transferring iterative blocks of memory */
3250

    
3251
    if (stage == 3) {
3252
        cpu_physical_memory_set_dirty_tracking(0);
3253

    
3254
        /* flush all remaining blocks regardless of rate limiting */
3255
        while (ram_save_block(f) != 0);
3256
    }
3257

    
3258
    qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
3259

    
3260
    return (stage == 2) && (ram_save_remaining() < ram_save_threshold);
3261
}
3262

    
3263
static int ram_load_dead(QEMUFile *f, void *opaque)
3264
{
3265
    RamDecompressState s1, *s = &s1;
3266
    uint8_t buf[10];
3267
    ram_addr_t i;
3268

    
3269
    if (ram_decompress_open(s, f) < 0)
3270
        return -EINVAL;
3271
    for(i = 0; i < phys_ram_size; i+= BDRV_HASH_BLOCK_SIZE) {
3272
        if (ram_decompress_buf(s, buf, 1) < 0) {
3273
            fprintf(stderr, "Error while reading ram block header\n");
3274
            goto error;
3275
        }
3276
        if (buf[0] == 0) {
3277
            if (ram_decompress_buf(s, phys_ram_base + i, BDRV_HASH_BLOCK_SIZE) < 0) {
3278
                fprintf(stderr, "Error while reading ram block address=0x%08" PRIx64, (uint64_t)i);
3279
                goto error;
3280
            }
3281
        } else {
3282
        error:
3283
            printf("Error block header\n");
3284
            return -EINVAL;
3285
        }
3286
    }
3287
    ram_decompress_close(s);
3288

    
3289
    return 0;
3290
}
3291

    
3292
static int ram_load(QEMUFile *f, void *opaque, int version_id)
3293
{
3294
    ram_addr_t addr;
3295
    int flags;
3296

    
3297
    if (version_id == 1)
3298
        return ram_load_v1(f, opaque);
3299

    
3300
    if (version_id == 2) {
3301
        if (qemu_get_be32(f) != phys_ram_size)
3302
            return -EINVAL;
3303
        return ram_load_dead(f, opaque);
3304
    }
3305

    
3306
    if (version_id != 3)
3307
        return -EINVAL;
3308

    
3309
    do {
3310
        addr = qemu_get_be64(f);
3311

    
3312
        flags = addr & ~TARGET_PAGE_MASK;
3313
        addr &= TARGET_PAGE_MASK;
3314

    
3315
        if (flags & RAM_SAVE_FLAG_MEM_SIZE) {
3316
            if (addr != phys_ram_size)
3317
                return -EINVAL;
3318
        }
3319

    
3320
        if (flags & RAM_SAVE_FLAG_FULL) {
3321
            if (ram_load_dead(f, opaque) < 0)
3322
                return -EINVAL;
3323
        }
3324
        
3325
        if (flags & RAM_SAVE_FLAG_COMPRESS) {
3326
            uint8_t ch = qemu_get_byte(f);
3327
            memset(phys_ram_base + addr, ch, TARGET_PAGE_SIZE);
3328
        } else if (flags & RAM_SAVE_FLAG_PAGE)
3329
            qemu_get_buffer(f, phys_ram_base + addr, TARGET_PAGE_SIZE);
3330
    } while (!(flags & RAM_SAVE_FLAG_EOS));
3331

    
3332
    return 0;
3333
}
3334

    
3335
void qemu_service_io(void)
3336
{
3337
    CPUState *env = cpu_single_env;
3338
    if (env) {
3339
        cpu_exit(env);
3340
#ifdef USE_KQEMU
3341
        if (env->kqemu_enabled) {
3342
            kqemu_cpu_interrupt(env);
3343
        }
3344
#endif
3345
    }
3346
}
3347

    
3348
/***********************************************************/
3349
/* bottom halves (can be seen as timers which expire ASAP) */
3350

    
3351
struct QEMUBH {
3352
    QEMUBHFunc *cb;
3353
    void *opaque;
3354
    int scheduled;
3355
    int idle;
3356
    int deleted;
3357
    QEMUBH *next;
3358
};
3359

    
3360
static QEMUBH *first_bh = NULL;
3361

    
3362
QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque)
3363
{
3364
    QEMUBH *bh;
3365
    bh = qemu_mallocz(sizeof(QEMUBH));
3366
    bh->cb = cb;
3367
    bh->opaque = opaque;
3368
    bh->next = first_bh;
3369
    first_bh = bh;
3370
    return bh;
3371
}
3372

    
3373
int qemu_bh_poll(void)
3374
{
3375
    QEMUBH *bh, **bhp;
3376
    int ret;
3377

    
3378
    ret = 0;
3379
    for (bh = first_bh; bh; bh = bh->next) {
3380
        if (!bh->deleted && bh->scheduled) {
3381
            bh->scheduled = 0;
3382
            if (!bh->idle)
3383
                ret = 1;
3384
            bh->idle = 0;
3385
            bh->cb(bh->opaque);
3386
        }
3387
    }
3388

    
3389
    /* remove deleted bhs */
3390
    bhp = &first_bh;
3391
    while (*bhp) {
3392
        bh = *bhp;
3393
        if (bh->deleted) {
3394
            *bhp = bh->next;
3395
            qemu_free(bh);
3396
        } else
3397
            bhp = &bh->next;
3398
    }
3399

    
3400
    return ret;
3401
}
3402

    
3403
void qemu_bh_schedule_idle(QEMUBH *bh)
3404
{
3405
    if (bh->scheduled)
3406
        return;
3407
    bh->scheduled = 1;
3408
    bh->idle = 1;
3409
}
3410

    
3411
void qemu_bh_schedule(QEMUBH *bh)
3412
{
3413
    CPUState *env = cpu_single_env;
3414
    if (bh->scheduled)
3415
        return;
3416
    bh->scheduled = 1;
3417
    bh->idle = 0;
3418
    /* stop the currently executing CPU to execute the BH ASAP */
3419
    if (env) {
3420
        cpu_exit(env);
3421
    }
3422
}
3423

    
3424
void qemu_bh_cancel(QEMUBH *bh)
3425
{
3426
    bh->scheduled = 0;
3427
}
3428

    
3429
void qemu_bh_delete(QEMUBH *bh)
3430
{
3431
    bh->scheduled = 0;
3432
    bh->deleted = 1;
3433
}
3434

    
3435
static void qemu_bh_update_timeout(int *timeout)
3436
{
3437
    QEMUBH *bh;
3438

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

    
3455
/***********************************************************/
3456
/* machine registration */
3457

    
3458
static QEMUMachine *first_machine = NULL;
3459
QEMUMachine *current_machine = NULL;
3460

    
3461
int qemu_register_machine(QEMUMachine *m)
3462
{
3463
    QEMUMachine **pm;
3464
    pm = &first_machine;
3465
    while (*pm != NULL)
3466
        pm = &(*pm)->next;
3467
    m->next = NULL;
3468
    *pm = m;
3469
    return 0;
3470
}
3471

    
3472
static QEMUMachine *find_machine(const char *name)
3473
{
3474
    QEMUMachine *m;
3475

    
3476
    for(m = first_machine; m != NULL; m = m->next) {
3477
        if (!strcmp(m->name, name))
3478
            return m;
3479
    }
3480
    return NULL;
3481
}
3482

    
3483
/***********************************************************/
3484
/* main execution loop */
3485

    
3486
static void gui_update(void *opaque)
3487
{
3488
    uint64_t interval = GUI_REFRESH_INTERVAL;
3489
    DisplayState *ds = opaque;
3490
    DisplayChangeListener *dcl = ds->listeners;
3491

    
3492
    dpy_refresh(ds);
3493

    
3494
    while (dcl != NULL) {
3495
        if (dcl->gui_timer_interval &&
3496
            dcl->gui_timer_interval < interval)
3497
            interval = dcl->gui_timer_interval;
3498
        dcl = dcl->next;
3499
    }
3500
    qemu_mod_timer(ds->gui_timer, interval + qemu_get_clock(rt_clock));
3501
}
3502

    
3503
static void nographic_update(void *opaque)
3504
{
3505
    uint64_t interval = GUI_REFRESH_INTERVAL;
3506

    
3507
    qemu_mod_timer(nographic_timer, interval + qemu_get_clock(rt_clock));
3508
}
3509

    
3510
struct vm_change_state_entry {
3511
    VMChangeStateHandler *cb;
3512
    void *opaque;
3513
    LIST_ENTRY (vm_change_state_entry) entries;
3514
};
3515

    
3516
static LIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
3517

    
3518
VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
3519
                                                     void *opaque)
3520
{
3521
    VMChangeStateEntry *e;
3522

    
3523
    e = qemu_mallocz(sizeof (*e));
3524

    
3525
    e->cb = cb;
3526
    e->opaque = opaque;
3527
    LIST_INSERT_HEAD(&vm_change_state_head, e, entries);
3528
    return e;
3529
}
3530

    
3531
void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
3532
{
3533
    LIST_REMOVE (e, entries);
3534
    qemu_free (e);
3535
}
3536

    
3537
static void vm_state_notify(int running, int reason)
3538
{
3539
    VMChangeStateEntry *e;
3540

    
3541
    for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) {
3542
        e->cb(e->opaque, running, reason);
3543
    }
3544
}
3545

    
3546
void vm_start(void)
3547
{
3548
    if (!vm_running) {
3549
        cpu_enable_ticks();
3550
        vm_running = 1;
3551
        vm_state_notify(1, 0);
3552
        qemu_rearm_alarm_timer(alarm_timer);
3553
    }
3554
}
3555

    
3556
void vm_stop(int reason)
3557
{
3558
    if (vm_running) {
3559
        cpu_disable_ticks();
3560
        vm_running = 0;
3561
        vm_state_notify(0, reason);
3562
    }
3563
}
3564

    
3565
/* reset/shutdown handler */
3566

    
3567
typedef struct QEMUResetEntry {
3568
    QEMUResetHandler *func;
3569
    void *opaque;
3570
    struct QEMUResetEntry *next;
3571
} QEMUResetEntry;
3572

    
3573
static QEMUResetEntry *first_reset_entry;
3574
static int reset_requested;
3575
static int shutdown_requested;
3576
static int powerdown_requested;
3577

    
3578
int qemu_shutdown_requested(void)
3579
{
3580
    int r = shutdown_requested;
3581
    shutdown_requested = 0;
3582
    return r;
3583
}
3584

    
3585
int qemu_reset_requested(void)
3586
{
3587
    int r = reset_requested;
3588
    reset_requested = 0;
3589
    return r;
3590
}
3591

    
3592
int qemu_powerdown_requested(void)
3593
{
3594
    int r = powerdown_requested;
3595
    powerdown_requested = 0;
3596
    return r;
3597
}
3598

    
3599
void qemu_register_reset(QEMUResetHandler *func, void *opaque)
3600
{
3601
    QEMUResetEntry **pre, *re;
3602

    
3603
    pre = &first_reset_entry;
3604
    while (*pre != NULL)
3605
        pre = &(*pre)->next;
3606
    re = qemu_mallocz(sizeof(QEMUResetEntry));
3607
    re->func = func;
3608
    re->opaque = opaque;
3609
    re->next = NULL;
3610
    *pre = re;
3611
}
3612

    
3613
void qemu_system_reset(void)
3614
{
3615
    QEMUResetEntry *re;
3616

    
3617
    /* reset all devices */
3618
    for(re = first_reset_entry; re != NULL; re = re->next) {
3619
        re->func(re->opaque);
3620
    }
3621
}
3622

    
3623
void qemu_system_reset_request(void)
3624
{
3625
    if (no_reboot) {
3626
        shutdown_requested = 1;
3627
    } else {
3628
        reset_requested = 1;
3629
    }
3630
    if (cpu_single_env)
3631
        cpu_exit(cpu_single_env);
3632
}
3633

    
3634
void qemu_system_shutdown_request(void)
3635
{
3636
    shutdown_requested = 1;
3637
    if (cpu_single_env)
3638
        cpu_exit(cpu_single_env);
3639
}
3640

    
3641
void qemu_system_powerdown_request(void)
3642
{
3643
    powerdown_requested = 1;
3644
    if (cpu_single_env)
3645
        cpu_exit(cpu_single_env);
3646
}
3647

    
3648
#ifdef _WIN32
3649
static void host_main_loop_wait(int *timeout)
3650
{
3651
    int ret, ret2, i;
3652
    PollingEntry *pe;
3653

    
3654

    
3655
    /* XXX: need to suppress polling by better using win32 events */
3656
    ret = 0;
3657
    for(pe = first_polling_entry; pe != NULL; pe = pe->next) {
3658
        ret |= pe->func(pe->opaque);
3659
    }
3660
    if (ret == 0) {
3661
        int err;
3662
        WaitObjects *w = &wait_objects;
3663

    
3664
        ret = WaitForMultipleObjects(w->num, w->events, FALSE, *timeout);
3665
        if (WAIT_OBJECT_0 + 0 <= ret && ret <= WAIT_OBJECT_0 + w->num - 1) {
3666
            if (w->func[ret - WAIT_OBJECT_0])
3667
                w->func[ret - WAIT_OBJECT_0](w->opaque[ret - WAIT_OBJECT_0]);
3668

    
3669
            /* Check for additional signaled events */
3670
            for(i = (ret - WAIT_OBJECT_0 + 1); i < w->num; i++) {
3671

    
3672
                /* Check if event is signaled */
3673
                ret2 = WaitForSingleObject(w->events[i], 0);
3674
                if(ret2 == WAIT_OBJECT_0) {
3675
                    if (w->func[i])
3676
                        w->func[i](w->opaque[i]);
3677
                } else if (ret2 == WAIT_TIMEOUT) {
3678
                } else {
3679
                    err = GetLastError();
3680
                    fprintf(stderr, "WaitForSingleObject error %d %d\n", i, err);
3681
                }
3682
            }
3683
        } else if (ret == WAIT_TIMEOUT) {
3684
        } else {
3685
            err = GetLastError();
3686
            fprintf(stderr, "WaitForMultipleObjects error %d %d\n", ret, err);
3687
        }
3688
    }
3689

    
3690
    *timeout = 0;
3691
}
3692
#else
3693
static void host_main_loop_wait(int *timeout)
3694
{
3695
}
3696
#endif
3697

    
3698
void main_loop_wait(int timeout)
3699
{
3700
    IOHandlerRecord *ioh;
3701
    fd_set rfds, wfds, xfds;
3702
    int ret, nfds;
3703
    struct timeval tv;
3704

    
3705
    qemu_bh_update_timeout(&timeout);
3706

    
3707
    host_main_loop_wait(&timeout);
3708

    
3709
    /* poll any events */
3710
    /* XXX: separate device handlers from system ones */
3711
    nfds = -1;
3712
    FD_ZERO(&rfds);
3713
    FD_ZERO(&wfds);
3714
    FD_ZERO(&xfds);
3715
    for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
3716
        if (ioh->deleted)
3717
            continue;
3718
        if (ioh->fd_read &&
3719
            (!ioh->fd_read_poll ||
3720
             ioh->fd_read_poll(ioh->opaque) != 0)) {
3721
            FD_SET(ioh->fd, &rfds);
3722
            if (ioh->fd > nfds)
3723
                nfds = ioh->fd;
3724
        }
3725
        if (ioh->fd_write) {
3726
            FD_SET(ioh->fd, &wfds);
3727
            if (ioh->fd > nfds)
3728
                nfds = ioh->fd;
3729
        }
3730
    }
3731

    
3732
    tv.tv_sec = timeout / 1000;
3733
    tv.tv_usec = (timeout % 1000) * 1000;
3734

    
3735
#if defined(CONFIG_SLIRP)
3736
    if (slirp_is_inited()) {
3737
        slirp_select_fill(&nfds, &rfds, &wfds, &xfds);
3738
    }
3739
#endif
3740
    ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv);
3741
    if (ret > 0) {
3742
        IOHandlerRecord **pioh;
3743

    
3744
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
3745
            if (!ioh->deleted && ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
3746
                ioh->fd_read(ioh->opaque);
3747
            }
3748
            if (!ioh->deleted && ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
3749
                ioh->fd_write(ioh->opaque);
3750
            }
3751
        }
3752

    
3753
        /* remove deleted IO handlers */
3754
        pioh = &first_io_handler;
3755
        while (*pioh) {
3756
            ioh = *pioh;
3757
            if (ioh->deleted) {
3758
                *pioh = ioh->next;
3759
                qemu_free(ioh);
3760
            } else
3761
                pioh = &ioh->next;
3762
        }
3763
    }
3764
#if defined(CONFIG_SLIRP)
3765
    if (slirp_is_inited()) {
3766
        if (ret < 0) {
3767
            FD_ZERO(&rfds);
3768
            FD_ZERO(&wfds);
3769
            FD_ZERO(&xfds);
3770
        }
3771
        slirp_select_poll(&rfds, &wfds, &xfds);
3772
    }
3773
#endif
3774

    
3775
    /* vm time timers */
3776
    if (vm_running && likely(!(cur_cpu->singlestep_enabled & SSTEP_NOTIMER)))
3777
        qemu_run_timers(&active_timers[QEMU_TIMER_VIRTUAL],
3778
                        qemu_get_clock(vm_clock));
3779

    
3780
    /* real time timers */
3781
    qemu_run_timers(&active_timers[QEMU_TIMER_REALTIME],
3782
                    qemu_get_clock(rt_clock));
3783

    
3784
    /* Check bottom-halves last in case any of the earlier events triggered
3785
       them.  */
3786
    qemu_bh_poll();
3787

    
3788
}
3789

    
3790
static int main_loop(void)
3791
{
3792
    int ret, timeout;
3793
#ifdef CONFIG_PROFILER
3794
    int64_t ti;
3795
#endif
3796
    CPUState *env;
3797

    
3798
    cur_cpu = first_cpu;
3799
    next_cpu = cur_cpu->next_cpu ?: first_cpu;
3800
    for(;;) {
3801
        if (vm_running) {
3802

    
3803
            for(;;) {
3804
                /* get next cpu */
3805
                env = next_cpu;
3806
#ifdef CONFIG_PROFILER
3807
                ti = profile_getclock();
3808
#endif
3809
                if (use_icount) {
3810
                    int64_t count;
3811
                    int decr;
3812
                    qemu_icount -= (env->icount_decr.u16.low + env->icount_extra);
3813
                    env->icount_decr.u16.low = 0;
3814
                    env->icount_extra = 0;
3815
                    count = qemu_next_deadline();
3816
                    count = (count + (1 << icount_time_shift) - 1)
3817
                            >> icount_time_shift;
3818
                    qemu_icount += count;
3819
                    decr = (count > 0xffff) ? 0xffff : count;
3820
                    count -= decr;
3821
                    env->icount_decr.u16.low = decr;
3822
                    env->icount_extra = count;
3823
                }
3824
                ret = cpu_exec(env);
3825
#ifdef CONFIG_PROFILER
3826
                qemu_time += profile_getclock() - ti;
3827
#endif
3828
                if (use_icount) {
3829
                    /* Fold pending instructions back into the
3830
                       instruction counter, and clear the interrupt flag.  */
3831
                    qemu_icount -= (env->icount_decr.u16.low
3832
                                    + env->icount_extra);
3833
                    env->icount_decr.u32 = 0;
3834
                    env->icount_extra = 0;
3835
                }
3836
                next_cpu = env->next_cpu ?: first_cpu;
3837
                if (event_pending && likely(ret != EXCP_DEBUG)) {
3838
                    ret = EXCP_INTERRUPT;
3839
                    event_pending = 0;
3840
                    break;
3841
                }
3842
                if (ret == EXCP_HLT) {
3843
                    /* Give the next CPU a chance to run.  */
3844
                    cur_cpu = env;
3845
                    continue;
3846
                }
3847
                if (ret != EXCP_HALTED)
3848
                    break;
3849
                /* all CPUs are halted ? */
3850
                if (env == cur_cpu)
3851
                    break;
3852
            }
3853
            cur_cpu = env;
3854

    
3855
            if (shutdown_requested) {
3856
                ret = EXCP_INTERRUPT;
3857
                if (no_shutdown) {
3858
                    vm_stop(0);
3859
                    no_shutdown = 0;
3860
                }
3861
                else
3862
                    break;
3863
            }
3864
            if (reset_requested) {
3865
                reset_requested = 0;
3866
                qemu_system_reset();
3867
                ret = EXCP_INTERRUPT;
3868
            }
3869
            if (powerdown_requested) {
3870
                powerdown_requested = 0;
3871
                qemu_system_powerdown();
3872
                ret = EXCP_INTERRUPT;
3873
            }
3874
            if (unlikely(ret == EXCP_DEBUG)) {
3875
                gdb_set_stop_cpu(cur_cpu);
3876
                vm_stop(EXCP_DEBUG);
3877
            }
3878
            /* If all cpus are halted then wait until the next IRQ */
3879
            /* XXX: use timeout computed from timers */
3880
            if (ret == EXCP_HALTED) {
3881
                if (use_icount) {
3882
                    int64_t add;
3883
                    int64_t delta;
3884
                    /* Advance virtual time to the next event.  */
3885
                    if (use_icount == 1) {
3886
                        /* When not using an adaptive execution frequency
3887
                           we tend to get badly out of sync with real time,
3888
                           so just delay for a reasonable amount of time.  */
3889
                        delta = 0;
3890
                    } else {
3891
                        delta = cpu_get_icount() - cpu_get_clock();
3892
                    }
3893
                    if (delta > 0) {
3894
                        /* If virtual time is ahead of real time then just
3895
                           wait for IO.  */
3896
                        timeout = (delta / 1000000) + 1;
3897
                    } else {
3898
                        /* Wait for either IO to occur or the next
3899
                           timer event.  */
3900
                        add = qemu_next_deadline();
3901
                        /* We advance the timer before checking for IO.
3902
                           Limit the amount we advance so that early IO
3903
                           activity won't get the guest too far ahead.  */
3904
                        if (add > 10000000)
3905
                            add = 10000000;
3906
                        delta += add;
3907
                        add = (add + (1 << icount_time_shift) - 1)
3908
                              >> icount_time_shift;
3909
                        qemu_icount += add;
3910
                        timeout = delta / 1000000;
3911
                        if (timeout < 0)
3912
                            timeout = 0;
3913
                    }
3914
                } else {
3915
                    timeout = 5000;
3916
                }
3917
            } else {
3918
                timeout = 0;
3919
            }
3920
        } else {
3921
            if (shutdown_requested) {
3922
                ret = EXCP_INTERRUPT;
3923
                break;
3924
            }
3925
            timeout = 5000;
3926
        }
3927
#ifdef CONFIG_PROFILER
3928
        ti = profile_getclock();
3929
#endif
3930
        main_loop_wait(timeout);
3931
#ifdef CONFIG_PROFILER
3932
        dev_time += profile_getclock() - ti;
3933
#endif
3934
    }
3935
    cpu_disable_ticks();
3936
    return ret;
3937
}
3938

    
3939
static void help(int exitcode)
3940
{
3941
    printf("QEMU PC emulator version " QEMU_VERSION ", Copyright (c) 2003-2008 Fabrice Bellard\n"
3942
           "usage: %s [options] [disk_image]\n"
3943
           "\n"
3944
           "'disk_image' is a raw hard image image for IDE hard disk 0\n"
3945
           "\n"
3946
#define DEF(option, opt_arg, opt_enum, opt_help)        \
3947
           opt_help
3948
#define DEFHEADING(text) stringify(text) "\n"
3949
#include "qemu-options.h"
3950
#undef DEF
3951
#undef DEFHEADING
3952
#undef GEN_DOCS
3953
           "\n"
3954
           "During emulation, the following keys are useful:\n"
3955
           "ctrl-alt-f      toggle full screen\n"
3956
           "ctrl-alt-n      switch to virtual console 'n'\n"
3957
           "ctrl-alt        toggle mouse and keyboard grab\n"
3958
           "\n"
3959
           "When using -nographic, press 'ctrl-a h' to get some help.\n"
3960
           ,
3961
           "qemu",
3962
           DEFAULT_RAM_SIZE,
3963
#ifndef _WIN32
3964
           DEFAULT_NETWORK_SCRIPT,
3965
           DEFAULT_NETWORK_DOWN_SCRIPT,
3966
#endif
3967
           DEFAULT_GDBSTUB_PORT,
3968
           "/tmp/qemu.log");
3969
    exit(exitcode);
3970
}
3971

    
3972
#define HAS_ARG 0x0001
3973

    
3974
enum {
3975
#define DEF(option, opt_arg, opt_enum, opt_help)        \
3976
    opt_enum,
3977
#define DEFHEADING(text)
3978
#include "qemu-options.h"
3979
#undef DEF
3980
#undef DEFHEADING
3981
#undef GEN_DOCS
3982
};
3983

    
3984
typedef struct QEMUOption {
3985
    const char *name;
3986
    int flags;
3987
    int index;
3988
} QEMUOption;
3989

    
3990
static const QEMUOption qemu_options[] = {
3991
    { "h", 0, QEMU_OPTION_h },
3992
#define DEF(option, opt_arg, opt_enum, opt_help)        \
3993
    { option, opt_arg, opt_enum },
3994
#define DEFHEADING(text)
3995
#include "qemu-options.h"
3996
#undef DEF
3997
#undef DEFHEADING
3998
#undef GEN_DOCS
3999
    { NULL },
4000
};
4001

    
4002
#ifdef HAS_AUDIO
4003
struct soundhw soundhw[] = {
4004
#ifdef HAS_AUDIO_CHOICE
4005
#if defined(TARGET_I386) || defined(TARGET_MIPS)
4006
    {
4007
        "pcspk",
4008
        "PC speaker",
4009
        0,
4010
        1,
4011
        { .init_isa = pcspk_audio_init }
4012
    },
4013
#endif
4014

    
4015
#ifdef CONFIG_SB16
4016
    {
4017
        "sb16",
4018
        "Creative Sound Blaster 16",
4019
        0,
4020
        1,
4021
        { .init_isa = SB16_init }
4022
    },
4023
#endif
4024

    
4025
#ifdef CONFIG_CS4231A
4026
    {
4027
        "cs4231a",
4028
        "CS4231A",
4029
        0,
4030
        1,
4031
        { .init_isa = cs4231a_init }
4032
    },
4033
#endif
4034

    
4035
#ifdef CONFIG_ADLIB
4036
    {
4037
        "adlib",
4038
#ifdef HAS_YMF262
4039
        "Yamaha YMF262 (OPL3)",
4040
#else
4041
        "Yamaha YM3812 (OPL2)",
4042
#endif
4043
        0,
4044
        1,
4045
        { .init_isa = Adlib_init }
4046
    },
4047
#endif
4048

    
4049
#ifdef CONFIG_GUS
4050
    {
4051
        "gus",
4052
        "Gravis Ultrasound GF1",
4053
        0,
4054
        1,
4055
        { .init_isa = GUS_init }
4056
    },
4057
#endif
4058

    
4059
#ifdef CONFIG_AC97
4060
    {
4061
        "ac97",
4062
        "Intel 82801AA AC97 Audio",
4063
        0,
4064
        0,
4065
        { .init_pci = ac97_init }
4066
    },
4067
#endif
4068

    
4069
#ifdef CONFIG_ES1370
4070
    {
4071
        "es1370",
4072
        "ENSONIQ AudioPCI ES1370",
4073
        0,
4074
        0,
4075
        { .init_pci = es1370_init }
4076
    },
4077
#endif
4078

    
4079
#endif /* HAS_AUDIO_CHOICE */
4080

    
4081
    { NULL, NULL, 0, 0, { NULL } }
4082
};
4083

    
4084
static void select_soundhw (const char *optarg)
4085
{
4086
    struct soundhw *c;
4087

    
4088
    if (*optarg == '?') {
4089
    show_valid_cards:
4090

    
4091
        printf ("Valid sound card names (comma separated):\n");
4092
        for (c = soundhw; c->name; ++c) {
4093
            printf ("%-11s %s\n", c->name, c->descr);
4094
        }
4095
        printf ("\n-soundhw all will enable all of the above\n");
4096
        exit (*optarg != '?');
4097
    }
4098
    else {
4099
        size_t l;
4100
        const char *p;
4101
        char *e;
4102
        int bad_card = 0;
4103

    
4104
        if (!strcmp (optarg, "all")) {
4105
            for (c = soundhw; c->name; ++c) {
4106
                c->enabled = 1;
4107
            }
4108
            return;
4109
        }
4110

    
4111
        p = optarg;
4112
        while (*p) {
4113
            e = strchr (p, ',');
4114
            l = !e ? strlen (p) : (size_t) (e - p);
4115

    
4116
            for (c = soundhw; c->name; ++c) {
4117
                if (!strncmp (c->name, p, l)) {
4118
                    c->enabled = 1;
4119
                    break;
4120
                }
4121
            }
4122

    
4123
            if (!c->name) {
4124
                if (l > 80) {
4125
                    fprintf (stderr,
4126
                             "Unknown sound card name (too big to show)\n");
4127
                }
4128
                else {
4129
                    fprintf (stderr, "Unknown sound card name `%.*s'\n",
4130
                             (int) l, p);
4131
                }
4132
                bad_card = 1;
4133
            }
4134
            p += l + (e != NULL);
4135
        }
4136

    
4137
        if (bad_card)
4138
            goto show_valid_cards;
4139
    }
4140
}
4141
#endif
4142

    
4143
static void select_vgahw (const char *p)
4144
{
4145
    const char *opts;
4146

    
4147
    if (strstart(p, "std", &opts)) {
4148
        std_vga_enabled = 1;
4149
        cirrus_vga_enabled = 0;
4150
        vmsvga_enabled = 0;
4151
    } else if (strstart(p, "cirrus", &opts)) {
4152
        cirrus_vga_enabled = 1;
4153
        std_vga_enabled = 0;
4154
        vmsvga_enabled = 0;
4155
    } else if (strstart(p, "vmware", &opts)) {
4156
        cirrus_vga_enabled = 0;
4157
        std_vga_enabled = 0;
4158
        vmsvga_enabled = 1;
4159
    } else if (strstart(p, "none", &opts)) {
4160
        cirrus_vga_enabled = 0;
4161
        std_vga_enabled = 0;
4162
        vmsvga_enabled = 0;
4163
    } else {
4164
    invalid_vga:
4165
        fprintf(stderr, "Unknown vga type: %s\n", p);
4166
        exit(1);
4167
    }
4168
    while (*opts) {
4169
        const char *nextopt;
4170

    
4171
        if (strstart(opts, ",retrace=", &nextopt)) {
4172
            opts = nextopt;
4173
            if (strstart(opts, "dumb", &nextopt))
4174
                vga_retrace_method = VGA_RETRACE_DUMB;
4175
            else if (strstart(opts, "precise", &nextopt))
4176
                vga_retrace_method = VGA_RETRACE_PRECISE;
4177
            else goto invalid_vga;
4178
        } else goto invalid_vga;
4179
        opts = nextopt;
4180
    }
4181
}
4182

    
4183
#ifdef _WIN32
4184
static BOOL WINAPI qemu_ctrl_handler(DWORD type)
4185
{
4186
    exit(STATUS_CONTROL_C_EXIT);
4187
    return TRUE;
4188
}
4189
#endif
4190

    
4191
static int qemu_uuid_parse(const char *str, uint8_t *uuid)
4192
{
4193
    int ret;
4194

    
4195
    if(strlen(str) != 36)
4196
        return -1;
4197

    
4198
    ret = sscanf(str, UUID_FMT, &uuid[0], &uuid[1], &uuid[2], &uuid[3],
4199
            &uuid[4], &uuid[5], &uuid[6], &uuid[7], &uuid[8], &uuid[9],
4200
            &uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14], &uuid[15]);
4201

    
4202
    if(ret != 16)
4203
        return -1;
4204

    
4205
    return 0;
4206
}
4207

    
4208
#define MAX_NET_CLIENTS 32
4209

    
4210
#ifndef _WIN32
4211

    
4212
static void termsig_handler(int signal)
4213
{
4214
    qemu_system_shutdown_request();
4215
}
4216

    
4217
static void termsig_setup(void)
4218
{
4219
    struct sigaction act;
4220

    
4221
    memset(&act, 0, sizeof(act));
4222
    act.sa_handler = termsig_handler;
4223
    sigaction(SIGINT,  &act, NULL);
4224
    sigaction(SIGHUP,  &act, NULL);
4225
    sigaction(SIGTERM, &act, NULL);
4226
}
4227

    
4228
#endif
4229

    
4230
int main(int argc, char **argv, char **envp)
4231
{
4232
#ifdef CONFIG_GDBSTUB
4233
    int use_gdbstub;
4234
    const char *gdbstub_port;
4235
#endif
4236
    uint32_t boot_devices_bitmap = 0;
4237
    int i;
4238
    int snapshot, linux_boot, net_boot;
4239
    const char *initrd_filename;
4240
    const char *kernel_filename, *kernel_cmdline;
4241
    const char *boot_devices = "";
4242
    DisplayState *ds;
4243
    DisplayChangeListener *dcl;
4244
    int cyls, heads, secs, translation;
4245
    const char *net_clients[MAX_NET_CLIENTS];
4246
    int nb_net_clients;
4247
    const char *bt_opts[MAX_BT_CMDLINE];
4248
    int nb_bt_opts;
4249
    int hda_index;
4250
    int optind;
4251
    const char *r, *optarg;
4252
    CharDriverState *monitor_hd = NULL;
4253
    const char *monitor_device;
4254
    const char *serial_devices[MAX_SERIAL_PORTS];
4255
    int serial_device_index;
4256
    const char *parallel_devices[MAX_PARALLEL_PORTS];
4257
    int parallel_device_index;
4258
    const char *virtio_consoles[MAX_VIRTIO_CONSOLES];
4259
    int virtio_console_index;
4260
    const char *loadvm = NULL;
4261
    QEMUMachine *machine;
4262
    const char *cpu_model;
4263
    const char *usb_devices[MAX_USB_CMDLINE];
4264
    int usb_devices_index;
4265
    int fds[2];
4266
    int tb_size;
4267
    const char *pid_file = NULL;
4268
    const char *incoming = NULL;
4269
    int fd = 0;
4270
    struct passwd *pwd = NULL;
4271
    const char *chroot_dir = NULL;
4272
    const char *run_as = NULL;
4273

    
4274
    qemu_cache_utils_init(envp);
4275

    
4276
    LIST_INIT (&vm_change_state_head);
4277
#ifndef _WIN32
4278
    {
4279
        struct sigaction act;
4280
        sigfillset(&act.sa_mask);
4281
        act.sa_flags = 0;
4282
        act.sa_handler = SIG_IGN;
4283
        sigaction(SIGPIPE, &act, NULL);
4284
    }
4285
#else
4286
    SetConsoleCtrlHandler(qemu_ctrl_handler, TRUE);
4287
    /* Note: cpu_interrupt() is currently not SMP safe, so we force
4288
       QEMU to run on a single CPU */
4289
    {
4290
        HANDLE h;
4291
        DWORD mask, smask;
4292
        int i;
4293
        h = GetCurrentProcess();
4294
        if (GetProcessAffinityMask(h, &mask, &smask)) {
4295
            for(i = 0; i < 32; i++) {
4296
                if (mask & (1 << i))
4297
                    break;
4298
            }
4299
            if (i != 32) {
4300
                mask = 1 << i;
4301
                SetProcessAffinityMask(h, mask);
4302
            }
4303
        }
4304
    }
4305
#endif
4306

    
4307
    register_machines();
4308
    machine = first_machine;
4309
    cpu_model = NULL;
4310
    initrd_filename = NULL;
4311
    ram_size = 0;
4312
    vga_ram_size = VGA_RAM_SIZE;
4313
#ifdef CONFIG_GDBSTUB
4314
    use_gdbstub = 0;
4315
    gdbstub_port = DEFAULT_GDBSTUB_PORT;
4316
#endif
4317
    snapshot = 0;
4318
    nographic = 0;
4319
    curses = 0;
4320
    kernel_filename = NULL;
4321
    kernel_cmdline = "";
4322
    cyls = heads = secs = 0;
4323
    translation = BIOS_ATA_TRANSLATION_AUTO;
4324
    monitor_device = "vc:80Cx24C";
4325

    
4326
    serial_devices[0] = "vc:80Cx24C";
4327
    for(i = 1; i < MAX_SERIAL_PORTS; i++)
4328
        serial_devices[i] = NULL;
4329
    serial_device_index = 0;
4330

    
4331
    parallel_devices[0] = "vc:80Cx24C";
4332
    for(i = 1; i < MAX_PARALLEL_PORTS; i++)
4333
        parallel_devices[i] = NULL;
4334
    parallel_device_index = 0;
4335

    
4336
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++)
4337
        virtio_consoles[i] = NULL;
4338
    virtio_console_index = 0;
4339

    
4340
    usb_devices_index = 0;
4341

    
4342
    nb_net_clients = 0;
4343
    nb_bt_opts = 0;
4344
    nb_drives = 0;
4345
    nb_drives_opt = 0;
4346
    hda_index = -1;
4347

    
4348
    nb_nics = 0;
4349

    
4350
    tb_size = 0;
4351
    autostart= 1;
4352

    
4353
    optind = 1;
4354
    for(;;) {
4355
        if (optind >= argc)
4356
            break;
4357
        r = argv[optind];
4358
        if (r[0] != '-') {
4359
            hda_index = drive_add(argv[optind++], HD_ALIAS, 0);
4360
        } else {
4361
            const QEMUOption *popt;
4362

    
4363
            optind++;
4364
            /* Treat --foo the same as -foo.  */
4365
            if (r[1] == '-')
4366
                r++;
4367
            popt = qemu_options;
4368
            for(;;) {
4369
                if (!popt->name) {
4370
                    fprintf(stderr, "%s: invalid option -- '%s'\n",
4371
                            argv[0], r);
4372
                    exit(1);
4373
                }
4374
                if (!strcmp(popt->name, r + 1))
4375
                    break;
4376
                popt++;
4377
            }
4378
            if (popt->flags & HAS_ARG) {
4379
                if (optind >= argc) {
4380
                    fprintf(stderr, "%s: option '%s' requires an argument\n",
4381
                            argv[0], r);
4382
                    exit(1);
4383
                }
4384
                optarg = argv[optind++];
4385
            } else {
4386
                optarg = NULL;
4387
            }
4388

    
4389
            switch(popt->index) {
4390
            case QEMU_OPTION_M:
4391
                machine = find_machine(optarg);
4392
                if (!machine) {
4393
                    QEMUMachine *m;
4394
                    printf("Supported machines are:\n");
4395
                    for(m = first_machine; m != NULL; m = m->next) {
4396
                        printf("%-10s %s%s\n",
4397
                               m->name, m->desc,
4398
                               m == first_machine ? " (default)" : "");
4399
                    }
4400
                    exit(*optarg != '?');
4401
                }
4402
                break;
4403
            case QEMU_OPTION_cpu:
4404
                /* hw initialization will check this */
4405
                if (*optarg == '?') {
4406
/* XXX: implement xxx_cpu_list for targets that still miss it */
4407
#if defined(cpu_list)
4408
                    cpu_list(stdout, &fprintf);
4409
#endif
4410
                    exit(0);
4411
                } else {
4412
                    cpu_model = optarg;
4413
                }
4414
                break;
4415
            case QEMU_OPTION_initrd:
4416
                initrd_filename = optarg;
4417
                break;
4418
            case QEMU_OPTION_hda:
4419
                if (cyls == 0)
4420
                    hda_index = drive_add(optarg, HD_ALIAS, 0);
4421
                else
4422
                    hda_index = drive_add(optarg, HD_ALIAS
4423
                             ",cyls=%d,heads=%d,secs=%d%s",
4424
                             0, cyls, heads, secs,
4425
                             translation == BIOS_ATA_TRANSLATION_LBA ?
4426
                                 ",trans=lba" :
4427
                             translation == BIOS_ATA_TRANSLATION_NONE ?
4428
                                 ",trans=none" : "");
4429
                 break;
4430
            case QEMU_OPTION_hdb:
4431
            case QEMU_OPTION_hdc:
4432
            case QEMU_OPTION_hdd:
4433
                drive_add(optarg, HD_ALIAS, popt->index - QEMU_OPTION_hda);
4434
                break;
4435
            case QEMU_OPTION_drive:
4436
                drive_add(NULL, "%s", optarg);
4437
                break;
4438
            case QEMU_OPTION_mtdblock:
4439
                drive_add(optarg, MTD_ALIAS);
4440
                break;
4441
            case QEMU_OPTION_sd:
4442
                drive_add(optarg, SD_ALIAS);
4443
                break;
4444
            case QEMU_OPTION_pflash:
4445
                drive_add(optarg, PFLASH_ALIAS);
4446
                break;
4447
            case QEMU_OPTION_snapshot:
4448
                snapshot = 1;
4449
                break;
4450
            case QEMU_OPTION_hdachs:
4451
                {
4452
                    const char *p;
4453
                    p = optarg;
4454
                    cyls = strtol(p, (char **)&p, 0);
4455
                    if (cyls < 1 || cyls > 16383)
4456
                        goto chs_fail;
4457
                    if (*p != ',')
4458
                        goto chs_fail;
4459
                    p++;
4460
                    heads = strtol(p, (char **)&p, 0);
4461
                    if (heads < 1 || heads > 16)
4462
                        goto chs_fail;
4463
                    if (*p != ',')
4464
                        goto chs_fail;
4465
                    p++;
4466
                    secs = strtol(p, (char **)&p, 0);
4467
                    if (secs < 1 || secs > 63)
4468
                        goto chs_fail;
4469
                    if (*p == ',') {
4470
                        p++;
4471
                        if (!strcmp(p, "none"))
4472
                            translation = BIOS_ATA_TRANSLATION_NONE;
4473
                        else if (!strcmp(p, "lba"))
4474
                            translation = BIOS_ATA_TRANSLATION_LBA;
4475
                        else if (!strcmp(p, "auto"))
4476
                            translation = BIOS_ATA_TRANSLATION_AUTO;
4477
                        else
4478
                            goto chs_fail;
4479
                    } else if (*p != '\0') {
4480
                    chs_fail:
4481
                        fprintf(stderr, "qemu: invalid physical CHS format\n");
4482
                        exit(1);
4483
                    }
4484
                    if (hda_index != -1)
4485
                        snprintf(drives_opt[hda_index].opt,
4486
                                 sizeof(drives_opt[hda_index].opt),
4487
                                 HD_ALIAS ",cyls=%d,heads=%d,secs=%d%s",
4488
                                 0, cyls, heads, secs,
4489
                                 translation == BIOS_ATA_TRANSLATION_LBA ?
4490
                                         ",trans=lba" :
4491
                                 translation == BIOS_ATA_TRANSLATION_NONE ?
4492
                                     ",trans=none" : "");
4493
                }
4494
                break;
4495
            case QEMU_OPTION_nographic:
4496
                nographic = 1;
4497
                break;
4498
#ifdef CONFIG_CURSES
4499
            case QEMU_OPTION_curses:
4500
                curses = 1;
4501
                break;
4502
#endif
4503
            case QEMU_OPTION_portrait:
4504
                graphic_rotate = 1;
4505
                break;
4506
            case QEMU_OPTION_kernel:
4507
                kernel_filename = optarg;
4508
                break;
4509
            case QEMU_OPTION_append:
4510
                kernel_cmdline = optarg;
4511
                break;
4512
            case QEMU_OPTION_cdrom:
4513
                drive_add(optarg, CDROM_ALIAS);
4514
                break;
4515
            case QEMU_OPTION_boot:
4516
                boot_devices = optarg;
4517
                /* We just do some generic consistency checks */
4518
                {
4519
                    /* Could easily be extended to 64 devices if needed */
4520
                    const char *p;
4521
                    
4522
                    boot_devices_bitmap = 0;
4523
                    for (p = boot_devices; *p != '\0'; p++) {
4524
                        /* Allowed boot devices are:
4525
                         * a b     : floppy disk drives
4526
                         * c ... f : IDE disk drives
4527
                         * g ... m : machine implementation dependant drives
4528
                         * n ... p : network devices
4529
                         * It's up to each machine implementation to check
4530
                         * if the given boot devices match the actual hardware
4531
                         * implementation and firmware features.
4532
                         */
4533
                        if (*p < 'a' || *p > 'q') {
4534
                            fprintf(stderr, "Invalid boot device '%c'\n", *p);
4535
                            exit(1);
4536
                        }
4537
                        if (boot_devices_bitmap & (1 << (*p - 'a'))) {
4538
                            fprintf(stderr,
4539
                                    "Boot device '%c' was given twice\n",*p);
4540
                            exit(1);
4541
                        }
4542
                        boot_devices_bitmap |= 1 << (*p - 'a');
4543
                    }
4544
                }
4545
                break;
4546
            case QEMU_OPTION_fda:
4547
            case QEMU_OPTION_fdb:
4548
                drive_add(optarg, FD_ALIAS, popt->index - QEMU_OPTION_fda);
4549
                break;
4550
#ifdef TARGET_I386
4551
            case QEMU_OPTION_no_fd_bootchk:
4552
                fd_bootchk = 0;
4553
                break;
4554
#endif
4555
            case QEMU_OPTION_net:
4556
                if (nb_net_clients >= MAX_NET_CLIENTS) {
4557
                    fprintf(stderr, "qemu: too many network clients\n");
4558
                    exit(1);
4559
                }
4560
                net_clients[nb_net_clients] = optarg;
4561
                nb_net_clients++;
4562
                break;
4563
#ifdef CONFIG_SLIRP
4564
            case QEMU_OPTION_tftp:
4565
                tftp_prefix = optarg;
4566
                break;
4567
            case QEMU_OPTION_bootp:
4568
                bootp_filename = optarg;
4569
                break;
4570
#ifndef _WIN32
4571
            case QEMU_OPTION_smb:
4572
                net_slirp_smb(optarg);
4573
                break;
4574
#endif
4575
            case QEMU_OPTION_redir:
4576
                net_slirp_redir(optarg);
4577
                break;
4578
#endif
4579
            case QEMU_OPTION_bt:
4580
                if (nb_bt_opts >= MAX_BT_CMDLINE) {
4581
                    fprintf(stderr, "qemu: too many bluetooth options\n");
4582
                    exit(1);
4583
                }
4584
                bt_opts[nb_bt_opts++] = optarg;
4585
                break;
4586
#ifdef HAS_AUDIO
4587
            case QEMU_OPTION_audio_help:
4588
                AUD_help ();
4589
                exit (0);
4590
                break;
4591
            case QEMU_OPTION_soundhw:
4592
                select_soundhw (optarg);
4593
                break;
4594
#endif
4595
            case QEMU_OPTION_h:
4596
                help(0);
4597
                break;
4598
            case QEMU_OPTION_m: {
4599
                uint64_t value;
4600
                char *ptr;
4601

    
4602
                value = strtoul(optarg, &ptr, 10);
4603
                switch (*ptr) {
4604
                case 0: case 'M': case 'm':
4605
                    value <<= 20;
4606
                    break;
4607
                case 'G': case 'g':
4608
                    value <<= 30;
4609
                    break;
4610
                default:
4611
                    fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
4612
                    exit(1);
4613
                }
4614

    
4615
                /* On 32-bit hosts, QEMU is limited by virtual address space */
4616
                if (value > (2047 << 20)
4617
#ifndef USE_KQEMU
4618
                    && HOST_LONG_BITS == 32
4619
#endif
4620
                    ) {
4621
                    fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n");
4622
                    exit(1);
4623
                }
4624
                if (value != (uint64_t)(ram_addr_t)value) {
4625
                    fprintf(stderr, "qemu: ram size too large\n");
4626
                    exit(1);
4627
                }
4628
                ram_size = value;
4629
                break;
4630
            }
4631
            case QEMU_OPTION_d:
4632
                {
4633
                    int mask;
4634
                    const CPULogItem *item;
4635

    
4636
                    mask = cpu_str_to_log_mask(optarg);
4637
                    if (!mask) {
4638
                        printf("Log items (comma separated):\n");
4639
                    for(item = cpu_log_items; item->mask != 0; item++) {
4640
                        printf("%-10s %s\n", item->name, item->help);
4641
                    }
4642
                    exit(1);
4643
                    }
4644
                    cpu_set_log(mask);
4645
                }
4646
                break;
4647
#ifdef CONFIG_GDBSTUB
4648
            case QEMU_OPTION_s:
4649
                use_gdbstub = 1;
4650
                break;
4651
            case QEMU_OPTION_p:
4652
                gdbstub_port = optarg;
4653
                break;
4654
#endif
4655
            case QEMU_OPTION_L:
4656
                bios_dir = optarg;
4657
                break;
4658
            case QEMU_OPTION_bios:
4659
                bios_name = optarg;
4660
                break;
4661
            case QEMU_OPTION_S:
4662
                autostart = 0;
4663
                break;
4664
#ifndef _WIN32
4665
            case QEMU_OPTION_k:
4666
                keyboard_layout = optarg;
4667
                break;
4668
#endif
4669
            case QEMU_OPTION_localtime:
4670
                rtc_utc = 0;
4671
                break;
4672
            case QEMU_OPTION_vga:
4673
                select_vgahw (optarg);
4674
                break;
4675
#if defined(TARGET_PPC) || defined(TARGET_SPARC)
4676
            case QEMU_OPTION_g:
4677
                {
4678
                    const char *p;
4679
                    int w, h, depth;
4680
                    p = optarg;
4681
                    w = strtol(p, (char **)&p, 10);
4682
                    if (w <= 0) {
4683
                    graphic_error:
4684
                        fprintf(stderr, "qemu: invalid resolution or depth\n");
4685
                        exit(1);
4686
                    }
4687
                    if (*p != 'x')
4688
                        goto graphic_error;
4689
                    p++;
4690
                    h = strtol(p, (char **)&p, 10);
4691
                    if (h <= 0)
4692
                        goto graphic_error;
4693
                    if (*p == 'x') {
4694
                        p++;
4695
                        depth = strtol(p, (char **)&p, 10);
4696
                        if (depth != 8 && depth != 15 && depth != 16 &&
4697
                            depth != 24 && depth != 32)
4698
                            goto graphic_error;
4699
                    } else if (*p == '\0') {
4700
                        depth = graphic_depth;
4701
                    } else {
4702
                        goto graphic_error;
4703
                    }
4704

    
4705
                    graphic_width = w;
4706
                    graphic_height = h;
4707
                    graphic_depth = depth;
4708
                }
4709
                break;
4710
#endif
4711
            case QEMU_OPTION_echr:
4712
                {
4713
                    char *r;
4714
                    term_escape_char = strtol(optarg, &r, 0);
4715
                    if (r == optarg)
4716
                        printf("Bad argument to echr\n");
4717
                    break;
4718
                }
4719
            case QEMU_OPTION_monitor:
4720
                monitor_device = optarg;
4721
                break;
4722
            case QEMU_OPTION_serial:
4723
                if (serial_device_index >= MAX_SERIAL_PORTS) {
4724
                    fprintf(stderr, "qemu: too many serial ports\n");
4725
                    exit(1);
4726
                }
4727
                serial_devices[serial_device_index] = optarg;
4728
                serial_device_index++;
4729
                break;
4730
            case QEMU_OPTION_virtiocon:
4731
                if (virtio_console_index >= MAX_VIRTIO_CONSOLES) {
4732
                    fprintf(stderr, "qemu: too many virtio consoles\n");
4733
                    exit(1);
4734
                }
4735
                virtio_consoles[virtio_console_index] = optarg;
4736
                virtio_console_index++;
4737
                break;
4738
            case QEMU_OPTION_parallel:
4739
                if (parallel_device_index >= MAX_PARALLEL_PORTS) {
4740
                    fprintf(stderr, "qemu: too many parallel ports\n");
4741
                    exit(1);
4742
                }
4743
                parallel_devices[parallel_device_index] = optarg;
4744
                parallel_device_index++;
4745
                break;
4746
            case QEMU_OPTION_loadvm:
4747
                loadvm = optarg;
4748
                break;
4749
            case QEMU_OPTION_full_screen:
4750
                full_screen = 1;
4751
                break;
4752
#ifdef CONFIG_SDL
4753
            case QEMU_OPTION_no_frame:
4754
                no_frame = 1;
4755
                break;
4756
            case QEMU_OPTION_alt_grab:
4757
                alt_grab = 1;
4758
                break;
4759
            case QEMU_OPTION_no_quit:
4760
                no_quit = 1;
4761
                break;
4762
            case QEMU_OPTION_sdl:
4763
                sdl = 1;
4764
                break;
4765
#endif
4766
            case QEMU_OPTION_pidfile:
4767
                pid_file = optarg;
4768
                break;
4769
#ifdef TARGET_I386
4770
            case QEMU_OPTION_win2k_hack:
4771
                win2k_install_hack = 1;
4772
                break;
4773
            case QEMU_OPTION_rtc_td_hack:
4774
                rtc_td_hack = 1;
4775
                break;
4776
            case QEMU_OPTION_acpitable:
4777
                if(acpi_table_add(optarg) < 0) {
4778
                    fprintf(stderr, "Wrong acpi table provided\n");
4779
                    exit(1);
4780
                }
4781
                break;
4782
#endif
4783
#ifdef USE_KQEMU
4784
            case QEMU_OPTION_no_kqemu:
4785
                kqemu_allowed = 0;
4786
                break;
4787
            case QEMU_OPTION_kernel_kqemu:
4788
                kqemu_allowed = 2;
4789
                break;
4790
#endif
4791
#ifdef CONFIG_KVM
4792
            case QEMU_OPTION_enable_kvm:
4793
                kvm_allowed = 1;
4794
#ifdef USE_KQEMU
4795
                kqemu_allowed = 0;
4796
#endif
4797
                break;
4798
#endif
4799
            case QEMU_OPTION_usb:
4800
                usb_enabled = 1;
4801
                break;
4802
            case QEMU_OPTION_usbdevice:
4803
                usb_enabled = 1;
4804
                if (usb_devices_index >= MAX_USB_CMDLINE) {
4805
                    fprintf(stderr, "Too many USB devices\n");
4806
                    exit(1);
4807
                }
4808
                usb_devices[usb_devices_index] = optarg;
4809
                usb_devices_index++;
4810
                break;
4811
            case QEMU_OPTION_smp:
4812
                smp_cpus = atoi(optarg);
4813
                if (smp_cpus < 1) {
4814
                    fprintf(stderr, "Invalid number of CPUs\n");
4815
                    exit(1);
4816
                }
4817
                break;
4818
            case QEMU_OPTION_vnc:
4819
                vnc_display = optarg;
4820
                break;
4821
#ifdef TARGET_I386
4822
            case QEMU_OPTION_no_acpi:
4823
                acpi_enabled = 0;
4824
                break;
4825
            case QEMU_OPTION_no_hpet:
4826
                no_hpet = 1;
4827
                break;
4828
#endif
4829
            case QEMU_OPTION_no_reboot:
4830
                no_reboot = 1;
4831
                break;
4832
            case QEMU_OPTION_no_shutdown:
4833
                no_shutdown = 1;
4834
                break;
4835
            case QEMU_OPTION_show_cursor:
4836
                cursor_hide = 0;
4837
                break;
4838
            case QEMU_OPTION_uuid:
4839
                if(qemu_uuid_parse(optarg, qemu_uuid) < 0) {
4840
                    fprintf(stderr, "Fail to parse UUID string."
4841
                            " Wrong format.\n");
4842
                    exit(1);
4843
                }
4844
                break;
4845
#ifndef _WIN32
4846
            case QEMU_OPTION_daemonize:
4847
                daemonize = 1;
4848
                break;
4849
#endif
4850
            case QEMU_OPTION_option_rom:
4851
                if (nb_option_roms >= MAX_OPTION_ROMS) {
4852
                    fprintf(stderr, "Too many option ROMs\n");
4853
                    exit(1);
4854
                }
4855
                option_rom[nb_option_roms] = optarg;
4856
                nb_option_roms++;
4857
                break;
4858
#if defined(TARGET_ARM) || defined(TARGET_M68K)
4859
            case QEMU_OPTION_semihosting:
4860
                semihosting_enabled = 1;
4861
                break;
4862
#endif
4863
            case QEMU_OPTION_name:
4864
                qemu_name = optarg;
4865
                break;
4866
#if defined(TARGET_SPARC) || defined(TARGET_PPC)
4867
            case QEMU_OPTION_prom_env:
4868
                if (nb_prom_envs >= MAX_PROM_ENVS) {
4869
                    fprintf(stderr, "Too many prom variables\n");
4870
                    exit(1);
4871
                }
4872
                prom_envs[nb_prom_envs] = optarg;
4873
                nb_prom_envs++;
4874
                break;
4875
#endif
4876
#ifdef TARGET_ARM
4877
            case QEMU_OPTION_old_param:
4878
                old_param = 1;
4879
                break;
4880
#endif
4881
            case QEMU_OPTION_clock:
4882
                configure_alarms(optarg);
4883
                break;
4884
            case QEMU_OPTION_startdate:
4885
                {
4886
                    struct tm tm;
4887
                    time_t rtc_start_date;
4888
                    if (!strcmp(optarg, "now")) {
4889
                        rtc_date_offset = -1;
4890
                    } else {
4891
                        if (sscanf(optarg, "%d-%d-%dT%d:%d:%d",
4892
                               &tm.tm_year,
4893
                               &tm.tm_mon,
4894
                               &tm.tm_mday,
4895
                               &tm.tm_hour,
4896
                               &tm.tm_min,
4897
                               &tm.tm_sec) == 6) {
4898
                            /* OK */
4899
                        } else if (sscanf(optarg, "%d-%d-%d",
4900
                                          &tm.tm_year,
4901
                                          &tm.tm_mon,
4902
                                          &tm.tm_mday) == 3) {
4903
                            tm.tm_hour = 0;
4904
                            tm.tm_min = 0;
4905
                            tm.tm_sec = 0;
4906
                        } else {
4907
                            goto date_fail;
4908
                        }
4909
                        tm.tm_year -= 1900;
4910
                        tm.tm_mon--;
4911
                        rtc_start_date = mktimegm(&tm);
4912
                        if (rtc_start_date == -1) {
4913
                        date_fail:
4914
                            fprintf(stderr, "Invalid date format. Valid format are:\n"
4915
                                    "'now' or '2006-06-17T16:01:21' or '2006-06-17'\n");
4916
                            exit(1);
4917
                        }
4918
                        rtc_date_offset = time(NULL) - rtc_start_date;
4919
                    }
4920
                }
4921
                break;
4922
            case QEMU_OPTION_tb_size:
4923
                tb_size = strtol(optarg, NULL, 0);
4924
                if (tb_size < 0)
4925
                    tb_size = 0;
4926
                break;
4927
            case QEMU_OPTION_icount:
4928
                use_icount = 1;
4929
                if (strcmp(optarg, "auto") == 0) {
4930
                    icount_time_shift = -1;
4931
                } else {
4932
                    icount_time_shift = strtol(optarg, NULL, 0);
4933
                }
4934
                break;
4935
            case QEMU_OPTION_incoming:
4936
                incoming = optarg;
4937
                break;
4938
#ifndef _WIN32
4939
            case QEMU_OPTION_chroot:
4940
                chroot_dir = optarg;
4941
                break;
4942
            case QEMU_OPTION_runas:
4943
                run_as = optarg;
4944
                break;
4945
#endif
4946
            }
4947
        }
4948
    }
4949

    
4950
#if defined(CONFIG_KVM) && defined(USE_KQEMU)
4951
    if (kvm_allowed && kqemu_allowed) {
4952
        fprintf(stderr,
4953
                "You can not enable both KVM and kqemu at the same time\n");
4954
        exit(1);
4955
    }
4956
#endif
4957

    
4958
    machine->max_cpus = machine->max_cpus ?: 1; /* Default to UP */
4959
    if (smp_cpus > machine->max_cpus) {
4960
        fprintf(stderr, "Number of SMP cpus requested (%d), exceeds max cpus "
4961
                "supported by machine `%s' (%d)\n", smp_cpus,  machine->name,
4962
                machine->max_cpus);
4963
        exit(1);
4964
    }
4965

    
4966
    if (nographic) {
4967
       if (serial_device_index == 0)
4968
           serial_devices[0] = "stdio";
4969
       if (parallel_device_index == 0)
4970
           parallel_devices[0] = "null";
4971
       if (strncmp(monitor_device, "vc", 2) == 0)
4972
           monitor_device = "stdio";
4973
    }
4974

    
4975
#ifndef _WIN32
4976
    if (daemonize) {
4977
        pid_t pid;
4978

    
4979
        if (pipe(fds) == -1)
4980
            exit(1);
4981

    
4982
        pid = fork();
4983
        if (pid > 0) {
4984
            uint8_t status;
4985
            ssize_t len;
4986

    
4987
            close(fds[1]);
4988

    
4989
        again:
4990
            len = read(fds[0], &status, 1);
4991
            if (len == -1 && (errno == EINTR))
4992
                goto again;
4993

    
4994
            if (len != 1)
4995
                exit(1);
4996
            else if (status == 1) {
4997
                fprintf(stderr, "Could not acquire pidfile\n");
4998
                exit(1);
4999
            } else
5000
                exit(0);
5001
        } else if (pid < 0)
5002
            exit(1);
5003

    
5004
        setsid();
5005

    
5006
        pid = fork();
5007
        if (pid > 0)
5008
            exit(0);
5009
        else if (pid < 0)
5010
            exit(1);
5011

    
5012
        umask(027);
5013

    
5014
        signal(SIGTSTP, SIG_IGN);
5015
        signal(SIGTTOU, SIG_IGN);
5016
        signal(SIGTTIN, SIG_IGN);
5017
    }
5018
#endif
5019

    
5020
    if (pid_file && qemu_create_pidfile(pid_file) != 0) {
5021
        if (daemonize) {
5022
            uint8_t status = 1;
5023
            write(fds[1], &status, 1);
5024
        } else
5025
            fprintf(stderr, "Could not acquire pid file\n");
5026
        exit(1);
5027
    }
5028

    
5029
#ifdef USE_KQEMU
5030
    if (smp_cpus > 1)
5031
        kqemu_allowed = 0;
5032
#endif
5033
    linux_boot = (kernel_filename != NULL);
5034
    net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
5035

    
5036
    if (!linux_boot && *kernel_cmdline != '\0') {
5037
        fprintf(stderr, "-append only allowed with -kernel option\n");
5038
        exit(1);
5039
    }
5040

    
5041
    if (!linux_boot && initrd_filename != NULL) {
5042
        fprintf(stderr, "-initrd only allowed with -kernel option\n");
5043
        exit(1);
5044
    }
5045

    
5046
    /* boot to floppy or the default cd if no hard disk defined yet */
5047
    if (!boot_devices[0]) {
5048
        boot_devices = "cad";
5049
    }
5050
    setvbuf(stdout, NULL, _IOLBF, 0);
5051

    
5052
    init_timers();
5053
    if (init_timer_alarm() < 0) {
5054
        fprintf(stderr, "could not initialize alarm timer\n");
5055
        exit(1);
5056
    }
5057
    if (use_icount && icount_time_shift < 0) {
5058
        use_icount = 2;
5059
        /* 125MIPS seems a reasonable initial guess at the guest speed.
5060
           It will be corrected fairly quickly anyway.  */
5061
        icount_time_shift = 3;
5062
        init_icount_adjust();
5063
    }
5064

    
5065
#ifdef _WIN32
5066
    socket_init();
5067
#endif
5068

    
5069
    /* init network clients */
5070
    if (nb_net_clients == 0) {
5071
        /* if no clients, we use a default config */
5072
        net_clients[nb_net_clients++] = "nic";
5073
#ifdef CONFIG_SLIRP
5074
        net_clients[nb_net_clients++] = "user";
5075
#endif
5076
    }
5077

    
5078
    for(i = 0;i < nb_net_clients; i++) {
5079
        if (net_client_parse(net_clients[i]) < 0)
5080
            exit(1);
5081
    }
5082
    net_client_check();
5083

    
5084
#ifdef TARGET_I386
5085
    /* XXX: this should be moved in the PC machine instantiation code */
5086
    if (net_boot != 0) {
5087
        int netroms = 0;
5088
        for (i = 0; i < nb_nics && i < 4; i++) {
5089
            const char *model = nd_table[i].model;
5090
            char buf[1024];
5091
            if (net_boot & (1 << i)) {
5092
                if (model == NULL)
5093
                    model = "ne2k_pci";
5094
                snprintf(buf, sizeof(buf), "%s/pxe-%s.bin", bios_dir, model);
5095
                if (get_image_size(buf) > 0) {
5096
                    if (nb_option_roms >= MAX_OPTION_ROMS) {
5097
                        fprintf(stderr, "Too many option ROMs\n");
5098
                        exit(1);
5099
                    }
5100
                    option_rom[nb_option_roms] = strdup(buf);
5101
                    nb_option_roms++;
5102
                    netroms++;
5103
                }
5104
            }
5105
        }
5106
        if (netroms == 0) {
5107
            fprintf(stderr, "No valid PXE rom found for network device\n");
5108
            exit(1);
5109
        }
5110
    }
5111
#endif
5112

    
5113
    /* init the bluetooth world */
5114
    for (i = 0; i < nb_bt_opts; i++)
5115
        if (bt_parse(bt_opts[i]))
5116
            exit(1);
5117

    
5118
    /* init the memory */
5119
    phys_ram_size = machine->ram_require & ~RAMSIZE_FIXED;
5120

    
5121
    if (machine->ram_require & RAMSIZE_FIXED) {
5122
        if (ram_size > 0) {
5123
            if (ram_size < phys_ram_size) {
5124
                fprintf(stderr, "Machine `%s' requires %llu bytes of memory\n",
5125
                                machine->name, (unsigned long long) phys_ram_size);
5126
                exit(-1);
5127
            }
5128

    
5129
            phys_ram_size = ram_size;
5130
        } else
5131
            ram_size = phys_ram_size;
5132
    } else {
5133
        if (ram_size == 0)
5134
            ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
5135

    
5136
        phys_ram_size += ram_size;
5137
    }
5138

    
5139
    phys_ram_base = qemu_vmalloc(phys_ram_size);
5140
    if (!phys_ram_base) {
5141
        fprintf(stderr, "Could not allocate physical memory\n");
5142
        exit(1);
5143
    }
5144

    
5145
    /* init the dynamic translator */
5146
    cpu_exec_init_all(tb_size * 1024 * 1024);
5147

    
5148
    bdrv_init();
5149
    dma_helper_init();
5150

    
5151
    /* we always create the cdrom drive, even if no disk is there */
5152

    
5153
    if (nb_drives_opt < MAX_DRIVES)
5154
        drive_add(NULL, CDROM_ALIAS);
5155

    
5156
    /* we always create at least one floppy */
5157

    
5158
    if (nb_drives_opt < MAX_DRIVES)
5159
        drive_add(NULL, FD_ALIAS, 0);
5160

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

    
5163
    if (nb_drives_opt < MAX_DRIVES)
5164
        drive_add(NULL, SD_ALIAS);
5165

    
5166
    /* open the virtual block devices */
5167

    
5168
    for(i = 0; i < nb_drives_opt; i++)
5169
        if (drive_init(&drives_opt[i], snapshot, machine) == -1)
5170
            exit(1);
5171

    
5172
    register_savevm("timer", 0, 2, timer_save, timer_load, NULL);
5173
    register_savevm_live("ram", 0, 3, ram_save_live, NULL, ram_load, NULL);
5174

    
5175
#ifndef _WIN32
5176
    /* must be after terminal init, SDL library changes signal handlers */
5177
    termsig_setup();
5178
#endif
5179

    
5180
    /* Maintain compatibility with multiple stdio monitors */
5181
    if (!strcmp(monitor_device,"stdio")) {
5182
        for (i = 0; i < MAX_SERIAL_PORTS; i++) {
5183
            const char *devname = serial_devices[i];
5184
            if (devname && !strcmp(devname,"mon:stdio")) {
5185
                monitor_device = NULL;
5186
                break;
5187
            } else if (devname && !strcmp(devname,"stdio")) {
5188
                monitor_device = NULL;
5189
                serial_devices[i] = "mon:stdio";
5190
                break;
5191
            }
5192
        }
5193
    }
5194

    
5195
    if (kvm_enabled()) {
5196
        int ret;
5197

    
5198
        ret = kvm_init(smp_cpus);
5199
        if (ret < 0) {
5200
            fprintf(stderr, "failed to initialize KVM\n");
5201
            exit(1);
5202
        }
5203
    }
5204

    
5205
    if (monitor_device) {
5206
        monitor_hd = qemu_chr_open("monitor", monitor_device, NULL);
5207
        if (!monitor_hd) {
5208
            fprintf(stderr, "qemu: could not open monitor device '%s'\n", monitor_device);
5209
            exit(1);
5210
        }
5211
    }
5212

    
5213
    for(i = 0; i < MAX_SERIAL_PORTS; i++) {
5214
        const char *devname = serial_devices[i];
5215
        if (devname && strcmp(devname, "none")) {
5216
            char label[32];
5217
            snprintf(label, sizeof(label), "serial%d", i);
5218
            serial_hds[i] = qemu_chr_open(label, devname, NULL);
5219
            if (!serial_hds[i]) {
5220
                fprintf(stderr, "qemu: could not open serial device '%s'\n",
5221
                        devname);
5222
                exit(1);
5223
            }
5224
        }
5225
    }
5226

    
5227
    for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
5228
        const char *devname = parallel_devices[i];
5229
        if (devname && strcmp(devname, "none")) {
5230
            char label[32];
5231
            snprintf(label, sizeof(label), "parallel%d", i);
5232
            parallel_hds[i] = qemu_chr_open(label, devname, NULL);
5233
            if (!parallel_hds[i]) {
5234
                fprintf(stderr, "qemu: could not open parallel device '%s'\n",
5235
                        devname);
5236
                exit(1);
5237
            }
5238
        }
5239
    }
5240

    
5241
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
5242
        const char *devname = virtio_consoles[i];
5243
        if (devname && strcmp(devname, "none")) {
5244
            char label[32];
5245
            snprintf(label, sizeof(label), "virtcon%d", i);
5246
            virtcon_hds[i] = qemu_chr_open(label, devname, NULL);
5247
            if (!virtcon_hds[i]) {
5248
                fprintf(stderr, "qemu: could not open virtio console '%s'\n",
5249
                        devname);
5250
                exit(1);
5251
            }
5252
        }
5253
    }
5254

    
5255
    machine->init(ram_size, vga_ram_size, boot_devices,
5256
                  kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
5257

    
5258
    current_machine = machine;
5259

    
5260
    /* Set KVM's vcpu state to qemu's initial CPUState. */
5261
    if (kvm_enabled()) {
5262
        int ret;
5263

    
5264
        ret = kvm_sync_vcpus();
5265
        if (ret < 0) {
5266
            fprintf(stderr, "failed to initialize vcpus\n");
5267
            exit(1);
5268
        }
5269
    }
5270

    
5271
    /* init USB devices */
5272
    if (usb_enabled) {
5273
        for(i = 0; i < usb_devices_index; i++) {
5274
            if (usb_device_add(usb_devices[i], 0) < 0) {
5275
                fprintf(stderr, "Warning: could not add USB device %s\n",
5276
                        usb_devices[i]);
5277
            }
5278
        }
5279
    }
5280

    
5281
    if (!display_state)
5282
        dumb_display_init();
5283
    /* just use the first displaystate for the moment */
5284
    ds = display_state;
5285
    /* terminal init */
5286
    if (nographic) {
5287
        if (curses) {
5288
            fprintf(stderr, "fatal: -nographic can't be used with -curses\n");
5289
            exit(1);
5290
        }
5291
    } else { 
5292
#if defined(CONFIG_CURSES)
5293
            if (curses) {
5294
                /* At the moment curses cannot be used with other displays */
5295
                curses_display_init(ds, full_screen);
5296
            } else
5297
#endif
5298
            {
5299
                if (vnc_display != NULL) {
5300
                    vnc_display_init(ds);
5301
                    if (vnc_display_open(ds, vnc_display) < 0)
5302
                        exit(1);
5303
                }
5304
#if defined(CONFIG_SDL)
5305
                if (sdl || !vnc_display)
5306
                    sdl_display_init(ds, full_screen, no_frame);
5307
#elif defined(CONFIG_COCOA)
5308
                if (sdl || !vnc_display)
5309
                    cocoa_display_init(ds, full_screen);
5310
#endif
5311
            }
5312
    }
5313
    dpy_resize(ds);
5314

    
5315
    dcl = ds->listeners;
5316
    while (dcl != NULL) {
5317
        if (dcl->dpy_refresh != NULL) {
5318
            ds->gui_timer = qemu_new_timer(rt_clock, gui_update, ds);
5319
            qemu_mod_timer(ds->gui_timer, qemu_get_clock(rt_clock));
5320
        }
5321
        dcl = dcl->next;
5322
    }
5323

    
5324
    if (nographic || (vnc_display && !sdl)) {
5325
        nographic_timer = qemu_new_timer(rt_clock, nographic_update, NULL);
5326
        qemu_mod_timer(nographic_timer, qemu_get_clock(rt_clock));
5327
    }
5328

    
5329
    text_consoles_set_display(display_state);
5330
    qemu_chr_initial_reset();
5331

    
5332
    if (monitor_device && monitor_hd)
5333
        monitor_init(monitor_hd, MONITOR_USE_READLINE | MONITOR_IS_DEFAULT);
5334

    
5335
    for(i = 0; i < MAX_SERIAL_PORTS; i++) {
5336
        const char *devname = serial_devices[i];
5337
        if (devname && strcmp(devname, "none")) {
5338
            char label[32];
5339
            snprintf(label, sizeof(label), "serial%d", i);
5340
            if (strstart(devname, "vc", 0))
5341
                qemu_chr_printf(serial_hds[i], "serial%d console\r\n", i);
5342
        }
5343
    }
5344

    
5345
    for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
5346
        const char *devname = parallel_devices[i];
5347
        if (devname && strcmp(devname, "none")) {
5348
            char label[32];
5349
            snprintf(label, sizeof(label), "parallel%d", i);
5350
            if (strstart(devname, "vc", 0))
5351
                qemu_chr_printf(parallel_hds[i], "parallel%d console\r\n", i);
5352
        }
5353
    }
5354

    
5355
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
5356
        const char *devname = virtio_consoles[i];
5357
        if (virtcon_hds[i] && devname) {
5358
            char label[32];
5359
            snprintf(label, sizeof(label), "virtcon%d", i);
5360
            if (strstart(devname, "vc", 0))
5361
                qemu_chr_printf(virtcon_hds[i], "virtio console%d\r\n", i);
5362
        }
5363
    }
5364

    
5365
#ifdef CONFIG_GDBSTUB
5366
    if (use_gdbstub) {
5367
        /* XXX: use standard host:port notation and modify options
5368
           accordingly. */
5369
        if (gdbserver_start(gdbstub_port) < 0) {
5370
            fprintf(stderr, "qemu: could not open gdbstub device on port '%s'\n",
5371
                    gdbstub_port);
5372
            exit(1);
5373
        }
5374
    }
5375
#endif
5376

    
5377
    if (loadvm)
5378
        do_loadvm(cur_mon, loadvm);
5379

    
5380
    if (incoming) {
5381
        autostart = 0; /* fixme how to deal with -daemonize */
5382
        qemu_start_incoming_migration(incoming);
5383
    }
5384

    
5385
    if (autostart)
5386
        vm_start();
5387

    
5388
    if (daemonize) {
5389
        uint8_t status = 0;
5390
        ssize_t len;
5391

    
5392
    again1:
5393
        len = write(fds[1], &status, 1);
5394
        if (len == -1 && (errno == EINTR))
5395
            goto again1;
5396

    
5397
        if (len != 1)
5398
            exit(1);
5399

    
5400
        chdir("/");
5401
        TFR(fd = open("/dev/null", O_RDWR));
5402
        if (fd == -1)
5403
            exit(1);
5404
    }
5405

    
5406
#ifndef _WIN32
5407
    if (run_as) {
5408
        pwd = getpwnam(run_as);
5409
        if (!pwd) {
5410
            fprintf(stderr, "User \"%s\" doesn't exist\n", run_as);
5411
            exit(1);
5412
        }
5413
    }
5414

    
5415
    if (chroot_dir) {
5416
        if (chroot(chroot_dir) < 0) {
5417
            fprintf(stderr, "chroot failed\n");
5418
            exit(1);
5419
        }
5420
        chdir("/");
5421
    }
5422

    
5423
    if (run_as) {
5424
        if (setgid(pwd->pw_gid) < 0) {
5425
            fprintf(stderr, "Failed to setgid(%d)\n", pwd->pw_gid);
5426
            exit(1);
5427
        }
5428
        if (setuid(pwd->pw_uid) < 0) {
5429
            fprintf(stderr, "Failed to setuid(%d)\n", pwd->pw_uid);
5430
            exit(1);
5431
        }
5432
        if (setuid(0) != -1) {
5433
            fprintf(stderr, "Dropping privileges failed\n");
5434
            exit(1);
5435
        }
5436
    }
5437
#endif
5438

    
5439
    if (daemonize) {
5440
        dup2(fd, 0);
5441
        dup2(fd, 1);
5442
        dup2(fd, 2);
5443

    
5444
        close(fd);
5445
    }
5446

    
5447
    main_loop();
5448
    quit_timers();
5449
    net_cleanup();
5450

    
5451
    return 0;
5452
}