Statistics
| Branch: | Revision:

root / vl.c @ 7ccfb2eb

History | View | Annotate | Download (239.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 "hw/hw.h"
25
#include "hw/boards.h"
26
#include "hw/usb.h"
27
#include "hw/pcmcia.h"
28
#include "hw/pc.h"
29
#include "hw/audiodev.h"
30
#include "hw/isa.h"
31
#include "hw/baum.h"
32
#include "net.h"
33
#include "console.h"
34
#include "sysemu.h"
35
#include "gdbstub.h"
36
#include "qemu-timer.h"
37
#include "qemu-char.h"
38
#include "block.h"
39
#include "audio/audio.h"
40

    
41
#include <unistd.h>
42
#include <fcntl.h>
43
#include <signal.h>
44
#include <time.h>
45
#include <errno.h>
46
#include <sys/time.h>
47
#include <zlib.h>
48

    
49
#ifndef _WIN32
50
#include <sys/times.h>
51
#include <sys/wait.h>
52
#include <termios.h>
53
#include <sys/poll.h>
54
#include <sys/mman.h>
55
#include <sys/ioctl.h>
56
#include <sys/socket.h>
57
#include <netinet/in.h>
58
#include <dirent.h>
59
#include <netdb.h>
60
#include <sys/select.h>
61
#include <arpa/inet.h>
62
#ifdef _BSD
63
#include <sys/stat.h>
64
#if !defined(__APPLE__) && !defined(__OpenBSD__)
65
#include <libutil.h>
66
#endif
67
#ifdef __OpenBSD__
68
#include <net/if.h>
69
#endif
70
#elif defined (__GLIBC__) && defined (__FreeBSD_kernel__)
71
#include <freebsd/stdlib.h>
72
#else
73
#ifndef __sun__
74
#include <linux/if.h>
75
#include <linux/if_tun.h>
76
#include <pty.h>
77
#include <malloc.h>
78
#include <linux/rtc.h>
79

    
80
/* For the benefit of older linux systems which don't supply it,
81
   we use a local copy of hpet.h. */
82
/* #include <linux/hpet.h> */
83
#include "hpet.h"
84

    
85
#include <linux/ppdev.h>
86
#include <linux/parport.h>
87
#else
88
#include <sys/stat.h>
89
#include <sys/ethernet.h>
90
#include <sys/sockio.h>
91
#include <netinet/arp.h>
92
#include <netinet/in.h>
93
#include <netinet/in_systm.h>
94
#include <netinet/ip.h>
95
#include <netinet/ip_icmp.h> // must come after ip.h
96
#include <netinet/udp.h>
97
#include <netinet/tcp.h>
98
#include <net/if.h>
99
#include <syslog.h>
100
#include <stropts.h>
101
#endif
102
#endif
103
#else
104
#include <winsock2.h>
105
int inet_aton(const char *cp, struct in_addr *ia);
106
#endif
107

    
108
#if defined(CONFIG_SLIRP)
109
#include "libslirp.h"
110
#endif
111

    
112
#if defined(__OpenBSD__)
113
#include <util.h>
114
#endif
115

    
116
#if defined(CONFIG_VDE)
117
#include <libvdeplug.h>
118
#endif
119

    
120
#ifdef _WIN32
121
#include <malloc.h>
122
#include <sys/timeb.h>
123
#include <mmsystem.h>
124
#define getopt_long_only getopt_long
125
#define memalign(align, size) malloc(size)
126
#endif
127

    
128
#include "qemu_socket.h"
129

    
130
#ifdef CONFIG_SDL
131
#ifdef __APPLE__
132
#include <SDL/SDL.h>
133
#endif
134
#endif /* CONFIG_SDL */
135

    
136
#ifdef CONFIG_COCOA
137
#undef main
138
#define main qemu_main
139
#endif /* CONFIG_COCOA */
140

    
141
#include "disas.h"
142

    
143
#include "exec-all.h"
144

    
145
#define DEFAULT_NETWORK_SCRIPT "/etc/qemu-ifup"
146
#define DEFAULT_NETWORK_DOWN_SCRIPT "/etc/qemu-ifdown"
147
#ifdef __sun__
148
#define SMBD_COMMAND "/usr/sfw/sbin/smbd"
149
#else
150
#define SMBD_COMMAND "/usr/sbin/smbd"
151
#endif
152

    
153
//#define DEBUG_UNUSED_IOPORT
154
//#define DEBUG_IOPORT
155

    
156
#ifdef TARGET_PPC
157
#define DEFAULT_RAM_SIZE 144
158
#else
159
#define DEFAULT_RAM_SIZE 128
160
#endif
161

    
162
/* Max number of USB devices that can be specified on the commandline.  */
163
#define MAX_USB_CMDLINE 8
164

    
165
/* XXX: use a two level table to limit memory usage */
166
#define MAX_IOPORTS 65536
167

    
168
const char *bios_dir = CONFIG_QEMU_SHAREDIR;
169
const char *bios_name = NULL;
170
void *ioport_opaque[MAX_IOPORTS];
171
IOPortReadFunc *ioport_read_table[3][MAX_IOPORTS];
172
IOPortWriteFunc *ioport_write_table[3][MAX_IOPORTS];
173
/* Note: drives_table[MAX_DRIVES] is a dummy block driver if none available
174
   to store the VM snapshots */
175
DriveInfo drives_table[MAX_DRIVES+1];
176
int nb_drives;
177
/* point to the block driver where the snapshots are managed */
178
BlockDriverState *bs_snapshots;
179
int vga_ram_size;
180
static DisplayState display_state;
181
int nographic;
182
int curses;
183
const char* keyboard_layout = NULL;
184
int64_t ticks_per_sec;
185
ram_addr_t ram_size;
186
int pit_min_timer_count = 0;
187
int nb_nics;
188
NICInfo nd_table[MAX_NICS];
189
int vm_running;
190
static int rtc_utc = 1;
191
static int rtc_date_offset = -1; /* -1 means no change */
192
int cirrus_vga_enabled = 1;
193
int vmsvga_enabled = 0;
194
#ifdef TARGET_SPARC
195
int graphic_width = 1024;
196
int graphic_height = 768;
197
int graphic_depth = 8;
198
#else
199
int graphic_width = 800;
200
int graphic_height = 600;
201
int graphic_depth = 15;
202
#endif
203
int full_screen = 0;
204
int no_frame = 0;
205
int no_quit = 0;
206
CharDriverState *serial_hds[MAX_SERIAL_PORTS];
207
CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
208
#ifdef TARGET_I386
209
int win2k_install_hack = 0;
210
#endif
211
int usb_enabled = 0;
212
static VLANState *first_vlan;
213
int smp_cpus = 1;
214
const char *vnc_display;
215
#if defined(TARGET_SPARC)
216
#define MAX_CPUS 16
217
#elif defined(TARGET_I386)
218
#define MAX_CPUS 255
219
#else
220
#define MAX_CPUS 1
221
#endif
222
int acpi_enabled = 1;
223
int fd_bootchk = 1;
224
int no_reboot = 0;
225
int no_shutdown = 0;
226
int cursor_hide = 1;
227
int graphic_rotate = 0;
228
int daemonize = 0;
229
const char *option_rom[MAX_OPTION_ROMS];
230
int nb_option_roms;
231
int semihosting_enabled = 0;
232
int autostart = 1;
233
#ifdef TARGET_ARM
234
int old_param = 0;
235
#endif
236
const char *qemu_name;
237
int alt_grab = 0;
238
#ifdef TARGET_SPARC
239
unsigned int nb_prom_envs = 0;
240
const char *prom_envs[MAX_PROM_ENVS];
241
#endif
242
int nb_drives_opt;
243
struct drive_opt {
244
    const char *file;
245
    char opt[1024];
246
} drives_opt[MAX_DRIVES];
247

    
248
static CPUState *cur_cpu;
249
static CPUState *next_cpu;
250
static int event_pending = 1;
251
/* Conversion factor from emulated instructions to virtual clock ticks.  */
252
static int icount_time_shift;
253
/* Arbitrarily pick 1MIPS as the minimum allowable speed.  */
254
#define MAX_ICOUNT_SHIFT 10
255
/* Compensate for varying guest execution speed.  */
256
static int64_t qemu_icount_bias;
257
QEMUTimer *icount_rt_timer;
258
QEMUTimer *icount_vm_timer;
259

    
260
#define TFR(expr) do { if ((expr) != -1) break; } while (errno == EINTR)
261

    
262
/***********************************************************/
263
/* x86 ISA bus support */
264

    
265
target_phys_addr_t isa_mem_base = 0;
266
PicState2 *isa_pic;
267

    
268
static IOPortReadFunc default_ioport_readb, default_ioport_readw, default_ioport_readl;
269
static IOPortWriteFunc default_ioport_writeb, default_ioport_writew, default_ioport_writel;
270

    
271
static uint32_t ioport_read(int index, uint32_t address)
272
{
273
    static IOPortReadFunc *default_func[3] = {
274
        default_ioport_readb,
275
        default_ioport_readw,
276
        default_ioport_readl
277
    };
278
    IOPortReadFunc *func = ioport_read_table[index][address];
279
    if (!func)
280
        func = default_func[index];
281
    return func(ioport_opaque[address], address);
282
}
283

    
284
static void ioport_write(int index, uint32_t address, uint32_t data)
285
{
286
    static IOPortWriteFunc *default_func[3] = {
287
        default_ioport_writeb,
288
        default_ioport_writew,
289
        default_ioport_writel
290
    };
291
    IOPortWriteFunc *func = ioport_write_table[index][address];
292
    if (!func)
293
        func = default_func[index];
294
    func(ioport_opaque[address], address, data);
295
}
296

    
297
static uint32_t default_ioport_readb(void *opaque, uint32_t address)
298
{
299
#ifdef DEBUG_UNUSED_IOPORT
300
    fprintf(stderr, "unused inb: port=0x%04x\n", address);
301
#endif
302
    return 0xff;
303
}
304

    
305
static void default_ioport_writeb(void *opaque, uint32_t address, uint32_t data)
306
{
307
#ifdef DEBUG_UNUSED_IOPORT
308
    fprintf(stderr, "unused outb: port=0x%04x data=0x%02x\n", address, data);
309
#endif
310
}
311

    
312
/* default is to make two byte accesses */
313
static uint32_t default_ioport_readw(void *opaque, uint32_t address)
314
{
315
    uint32_t data;
316
    data = ioport_read(0, address);
317
    address = (address + 1) & (MAX_IOPORTS - 1);
318
    data |= ioport_read(0, address) << 8;
319
    return data;
320
}
321

    
322
static void default_ioport_writew(void *opaque, uint32_t address, uint32_t data)
323
{
324
    ioport_write(0, address, data & 0xff);
325
    address = (address + 1) & (MAX_IOPORTS - 1);
326
    ioport_write(0, address, (data >> 8) & 0xff);
327
}
328

    
329
static uint32_t default_ioport_readl(void *opaque, uint32_t address)
330
{
331
#ifdef DEBUG_UNUSED_IOPORT
332
    fprintf(stderr, "unused inl: port=0x%04x\n", address);
333
#endif
334
    return 0xffffffff;
335
}
336

    
337
static void default_ioport_writel(void *opaque, uint32_t address, uint32_t data)
338
{
339
#ifdef DEBUG_UNUSED_IOPORT
340
    fprintf(stderr, "unused outl: port=0x%04x data=0x%02x\n", address, data);
341
#endif
342
}
343

    
344
/* size is the word size in byte */
345
int register_ioport_read(int start, int length, int size,
346
                         IOPortReadFunc *func, void *opaque)
347
{
348
    int i, bsize;
349

    
350
    if (size == 1) {
351
        bsize = 0;
352
    } else if (size == 2) {
353
        bsize = 1;
354
    } else if (size == 4) {
355
        bsize = 2;
356
    } else {
357
        hw_error("register_ioport_read: invalid size");
358
        return -1;
359
    }
360
    for(i = start; i < start + length; i += size) {
361
        ioport_read_table[bsize][i] = func;
362
        if (ioport_opaque[i] != NULL && ioport_opaque[i] != opaque)
363
            hw_error("register_ioport_read: invalid opaque");
364
        ioport_opaque[i] = opaque;
365
    }
366
    return 0;
367
}
368

    
369
/* size is the word size in byte */
370
int register_ioport_write(int start, int length, int size,
371
                          IOPortWriteFunc *func, void *opaque)
372
{
373
    int i, bsize;
374

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

    
394
void isa_unassign_ioport(int start, int length)
395
{
396
    int i;
397

    
398
    for(i = start; i < start + length; i++) {
399
        ioport_read_table[0][i] = default_ioport_readb;
400
        ioport_read_table[1][i] = default_ioport_readw;
401
        ioport_read_table[2][i] = default_ioport_readl;
402

    
403
        ioport_write_table[0][i] = default_ioport_writeb;
404
        ioport_write_table[1][i] = default_ioport_writew;
405
        ioport_write_table[2][i] = default_ioport_writel;
406
    }
407
}
408

    
409
/***********************************************************/
410

    
411
void cpu_outb(CPUState *env, int addr, int val)
412
{
413
#ifdef DEBUG_IOPORT
414
    if (loglevel & CPU_LOG_IOPORT)
415
        fprintf(logfile, "outb: %04x %02x\n", addr, val);
416
#endif
417
    ioport_write(0, addr, val);
418
#ifdef USE_KQEMU
419
    if (env)
420
        env->last_io_time = cpu_get_time_fast();
421
#endif
422
}
423

    
424
void cpu_outw(CPUState *env, int addr, int val)
425
{
426
#ifdef DEBUG_IOPORT
427
    if (loglevel & CPU_LOG_IOPORT)
428
        fprintf(logfile, "outw: %04x %04x\n", addr, val);
429
#endif
430
    ioport_write(1, addr, val);
431
#ifdef USE_KQEMU
432
    if (env)
433
        env->last_io_time = cpu_get_time_fast();
434
#endif
435
}
436

    
437
void cpu_outl(CPUState *env, int addr, int val)
438
{
439
#ifdef DEBUG_IOPORT
440
    if (loglevel & CPU_LOG_IOPORT)
441
        fprintf(logfile, "outl: %04x %08x\n", addr, val);
442
#endif
443
    ioport_write(2, addr, val);
444
#ifdef USE_KQEMU
445
    if (env)
446
        env->last_io_time = cpu_get_time_fast();
447
#endif
448
}
449

    
450
int cpu_inb(CPUState *env, int addr)
451
{
452
    int val;
453
    val = ioport_read(0, addr);
454
#ifdef DEBUG_IOPORT
455
    if (loglevel & CPU_LOG_IOPORT)
456
        fprintf(logfile, "inb : %04x %02x\n", addr, val);
457
#endif
458
#ifdef USE_KQEMU
459
    if (env)
460
        env->last_io_time = cpu_get_time_fast();
461
#endif
462
    return val;
463
}
464

    
465
int cpu_inw(CPUState *env, int addr)
466
{
467
    int val;
468
    val = ioport_read(1, addr);
469
#ifdef DEBUG_IOPORT
470
    if (loglevel & CPU_LOG_IOPORT)
471
        fprintf(logfile, "inw : %04x %04x\n", addr, val);
472
#endif
473
#ifdef USE_KQEMU
474
    if (env)
475
        env->last_io_time = cpu_get_time_fast();
476
#endif
477
    return val;
478
}
479

    
480
int cpu_inl(CPUState *env, int addr)
481
{
482
    int val;
483
    val = ioport_read(2, addr);
484
#ifdef DEBUG_IOPORT
485
    if (loglevel & CPU_LOG_IOPORT)
486
        fprintf(logfile, "inl : %04x %08x\n", addr, val);
487
#endif
488
#ifdef USE_KQEMU
489
    if (env)
490
        env->last_io_time = cpu_get_time_fast();
491
#endif
492
    return val;
493
}
494

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

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

    
517
/***********************************************************/
518
/* keyboard/mouse */
519

    
520
static QEMUPutKBDEvent *qemu_put_kbd_event;
521
static void *qemu_put_kbd_event_opaque;
522
static QEMUPutMouseEntry *qemu_put_mouse_event_head;
523
static QEMUPutMouseEntry *qemu_put_mouse_event_current;
524

    
525
void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
526
{
527
    qemu_put_kbd_event_opaque = opaque;
528
    qemu_put_kbd_event = func;
529
}
530

    
531
QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
532
                                                void *opaque, int absolute,
533
                                                const char *name)
534
{
535
    QEMUPutMouseEntry *s, *cursor;
536

    
537
    s = qemu_mallocz(sizeof(QEMUPutMouseEntry));
538
    if (!s)
539
        return NULL;
540

    
541
    s->qemu_put_mouse_event = func;
542
    s->qemu_put_mouse_event_opaque = opaque;
543
    s->qemu_put_mouse_event_absolute = absolute;
544
    s->qemu_put_mouse_event_name = qemu_strdup(name);
545
    s->next = NULL;
546

    
547
    if (!qemu_put_mouse_event_head) {
548
        qemu_put_mouse_event_head = qemu_put_mouse_event_current = s;
549
        return s;
550
    }
551

    
552
    cursor = qemu_put_mouse_event_head;
553
    while (cursor->next != NULL)
554
        cursor = cursor->next;
555

    
556
    cursor->next = s;
557
    qemu_put_mouse_event_current = s;
558

    
559
    return s;
560
}
561

    
562
void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry)
563
{
564
    QEMUPutMouseEntry *prev = NULL, *cursor;
565

    
566
    if (!qemu_put_mouse_event_head || entry == NULL)
567
        return;
568

    
569
    cursor = qemu_put_mouse_event_head;
570
    while (cursor != NULL && cursor != entry) {
571
        prev = cursor;
572
        cursor = cursor->next;
573
    }
574

    
575
    if (cursor == NULL) // does not exist or list empty
576
        return;
577
    else if (prev == NULL) { // entry is head
578
        qemu_put_mouse_event_head = cursor->next;
579
        if (qemu_put_mouse_event_current == entry)
580
            qemu_put_mouse_event_current = cursor->next;
581
        qemu_free(entry->qemu_put_mouse_event_name);
582
        qemu_free(entry);
583
        return;
584
    }
585

    
586
    prev->next = entry->next;
587

    
588
    if (qemu_put_mouse_event_current == entry)
589
        qemu_put_mouse_event_current = prev;
590

    
591
    qemu_free(entry->qemu_put_mouse_event_name);
592
    qemu_free(entry);
593
}
594

    
595
void kbd_put_keycode(int keycode)
596
{
597
    if (qemu_put_kbd_event) {
598
        qemu_put_kbd_event(qemu_put_kbd_event_opaque, keycode);
599
    }
600
}
601

    
602
void kbd_mouse_event(int dx, int dy, int dz, int buttons_state)
603
{
604
    QEMUPutMouseEvent *mouse_event;
605
    void *mouse_event_opaque;
606
    int width;
607

    
608
    if (!qemu_put_mouse_event_current) {
609
        return;
610
    }
611

    
612
    mouse_event =
613
        qemu_put_mouse_event_current->qemu_put_mouse_event;
614
    mouse_event_opaque =
615
        qemu_put_mouse_event_current->qemu_put_mouse_event_opaque;
616

    
617
    if (mouse_event) {
618
        if (graphic_rotate) {
619
            if (qemu_put_mouse_event_current->qemu_put_mouse_event_absolute)
620
                width = 0x7fff;
621
            else
622
                width = graphic_width - 1;
623
            mouse_event(mouse_event_opaque,
624
                                 width - dy, dx, dz, buttons_state);
625
        } else
626
            mouse_event(mouse_event_opaque,
627
                                 dx, dy, dz, buttons_state);
628
    }
629
}
630

    
631
int kbd_mouse_is_absolute(void)
632
{
633
    if (!qemu_put_mouse_event_current)
634
        return 0;
635

    
636
    return qemu_put_mouse_event_current->qemu_put_mouse_event_absolute;
637
}
638

    
639
void do_info_mice(void)
640
{
641
    QEMUPutMouseEntry *cursor;
642
    int index = 0;
643

    
644
    if (!qemu_put_mouse_event_head) {
645
        term_printf("No mouse devices connected\n");
646
        return;
647
    }
648

    
649
    term_printf("Mouse devices available:\n");
650
    cursor = qemu_put_mouse_event_head;
651
    while (cursor != NULL) {
652
        term_printf("%c Mouse #%d: %s\n",
653
                    (cursor == qemu_put_mouse_event_current ? '*' : ' '),
654
                    index, cursor->qemu_put_mouse_event_name);
655
        index++;
656
        cursor = cursor->next;
657
    }
658
}
659

    
660
void do_mouse_set(int index)
661
{
662
    QEMUPutMouseEntry *cursor;
663
    int i = 0;
664

    
665
    if (!qemu_put_mouse_event_head) {
666
        term_printf("No mouse devices connected\n");
667
        return;
668
    }
669

    
670
    cursor = qemu_put_mouse_event_head;
671
    while (cursor != NULL && index != i) {
672
        i++;
673
        cursor = cursor->next;
674
    }
675

    
676
    if (cursor != NULL)
677
        qemu_put_mouse_event_current = cursor;
678
    else
679
        term_printf("Mouse at given index not found\n");
680
}
681

    
682
/* compute with 96 bit intermediate result: (a*b)/c */
683
uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
684
{
685
    union {
686
        uint64_t ll;
687
        struct {
688
#ifdef WORDS_BIGENDIAN
689
            uint32_t high, low;
690
#else
691
            uint32_t low, high;
692
#endif
693
        } l;
694
    } u, res;
695
    uint64_t rl, rh;
696

    
697
    u.ll = a;
698
    rl = (uint64_t)u.l.low * (uint64_t)b;
699
    rh = (uint64_t)u.l.high * (uint64_t)b;
700
    rh += (rl >> 32);
701
    res.l.high = rh / c;
702
    res.l.low = (((rh % c) << 32) + (rl & 0xffffffff)) / c;
703
    return res.ll;
704
}
705

    
706
/***********************************************************/
707
/* real time host monotonic timer */
708

    
709
#define QEMU_TIMER_BASE 1000000000LL
710

    
711
#ifdef WIN32
712

    
713
static int64_t clock_freq;
714

    
715
static void init_get_clock(void)
716
{
717
    LARGE_INTEGER freq;
718
    int ret;
719
    ret = QueryPerformanceFrequency(&freq);
720
    if (ret == 0) {
721
        fprintf(stderr, "Could not calibrate ticks\n");
722
        exit(1);
723
    }
724
    clock_freq = freq.QuadPart;
725
}
726

    
727
static int64_t get_clock(void)
728
{
729
    LARGE_INTEGER ti;
730
    QueryPerformanceCounter(&ti);
731
    return muldiv64(ti.QuadPart, QEMU_TIMER_BASE, clock_freq);
732
}
733

    
734
#else
735

    
736
static int use_rt_clock;
737

    
738
static void init_get_clock(void)
739
{
740
    use_rt_clock = 0;
741
#if defined(__linux__)
742
    {
743
        struct timespec ts;
744
        if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) {
745
            use_rt_clock = 1;
746
        }
747
    }
748
#endif
749
}
750

    
751
static int64_t get_clock(void)
752
{
753
#if defined(__linux__)
754
    if (use_rt_clock) {
755
        struct timespec ts;
756
        clock_gettime(CLOCK_MONOTONIC, &ts);
757
        return ts.tv_sec * 1000000000LL + ts.tv_nsec;
758
    } else
759
#endif
760
    {
761
        /* XXX: using gettimeofday leads to problems if the date
762
           changes, so it should be avoided. */
763
        struct timeval tv;
764
        gettimeofday(&tv, NULL);
765
        return tv.tv_sec * 1000000000LL + (tv.tv_usec * 1000);
766
    }
767
}
768
#endif
769

    
770
/* Return the virtual CPU time, based on the instruction counter.  */
771
static int64_t cpu_get_icount(void)
772
{
773
    int64_t icount;
774
    CPUState *env = cpu_single_env;;
775
    icount = qemu_icount;
776
    if (env) {
777
        if (!can_do_io(env))
778
            fprintf(stderr, "Bad clock read\n");
779
        icount -= (env->icount_decr.u16.low + env->icount_extra);
780
    }
781
    return qemu_icount_bias + (icount << icount_time_shift);
782
}
783

    
784
/***********************************************************/
785
/* guest cycle counter */
786

    
787
static int64_t cpu_ticks_prev;
788
static int64_t cpu_ticks_offset;
789
static int64_t cpu_clock_offset;
790
static int cpu_ticks_enabled;
791

    
792
/* return the host CPU cycle counter and handle stop/restart */
793
int64_t cpu_get_ticks(void)
794
{
795
    if (use_icount) {
796
        return cpu_get_icount();
797
    }
798
    if (!cpu_ticks_enabled) {
799
        return cpu_ticks_offset;
800
    } else {
801
        int64_t ticks;
802
        ticks = cpu_get_real_ticks();
803
        if (cpu_ticks_prev > ticks) {
804
            /* Note: non increasing ticks may happen if the host uses
805
               software suspend */
806
            cpu_ticks_offset += cpu_ticks_prev - ticks;
807
        }
808
        cpu_ticks_prev = ticks;
809
        return ticks + cpu_ticks_offset;
810
    }
811
}
812

    
813
/* return the host CPU monotonic timer and handle stop/restart */
814
static int64_t cpu_get_clock(void)
815
{
816
    int64_t ti;
817
    if (!cpu_ticks_enabled) {
818
        return cpu_clock_offset;
819
    } else {
820
        ti = get_clock();
821
        return ti + cpu_clock_offset;
822
    }
823
}
824

    
825
/* enable cpu_get_ticks() */
826
void cpu_enable_ticks(void)
827
{
828
    if (!cpu_ticks_enabled) {
829
        cpu_ticks_offset -= cpu_get_real_ticks();
830
        cpu_clock_offset -= get_clock();
831
        cpu_ticks_enabled = 1;
832
    }
833
}
834

    
835
/* disable cpu_get_ticks() : the clock is stopped. You must not call
836
   cpu_get_ticks() after that.  */
837
void cpu_disable_ticks(void)
838
{
839
    if (cpu_ticks_enabled) {
840
        cpu_ticks_offset = cpu_get_ticks();
841
        cpu_clock_offset = cpu_get_clock();
842
        cpu_ticks_enabled = 0;
843
    }
844
}
845

    
846
/***********************************************************/
847
/* timers */
848

    
849
#define QEMU_TIMER_REALTIME 0
850
#define QEMU_TIMER_VIRTUAL  1
851

    
852
struct QEMUClock {
853
    int type;
854
    /* XXX: add frequency */
855
};
856

    
857
struct QEMUTimer {
858
    QEMUClock *clock;
859
    int64_t expire_time;
860
    QEMUTimerCB *cb;
861
    void *opaque;
862
    struct QEMUTimer *next;
863
};
864

    
865
struct qemu_alarm_timer {
866
    char const *name;
867
    unsigned int flags;
868

    
869
    int (*start)(struct qemu_alarm_timer *t);
870
    void (*stop)(struct qemu_alarm_timer *t);
871
    void (*rearm)(struct qemu_alarm_timer *t);
872
    void *priv;
873
};
874

    
875
#define ALARM_FLAG_DYNTICKS  0x1
876
#define ALARM_FLAG_EXPIRED   0x2
877

    
878
static inline int alarm_has_dynticks(struct qemu_alarm_timer *t)
879
{
880
    return t->flags & ALARM_FLAG_DYNTICKS;
881
}
882

    
883
static void qemu_rearm_alarm_timer(struct qemu_alarm_timer *t)
884
{
885
    if (!alarm_has_dynticks(t))
886
        return;
887

    
888
    t->rearm(t);
889
}
890

    
891
/* TODO: MIN_TIMER_REARM_US should be optimized */
892
#define MIN_TIMER_REARM_US 250
893

    
894
static struct qemu_alarm_timer *alarm_timer;
895

    
896
#ifdef _WIN32
897

    
898
struct qemu_alarm_win32 {
899
    MMRESULT timerId;
900
    HANDLE host_alarm;
901
    unsigned int period;
902
} alarm_win32_data = {0, NULL, -1};
903

    
904
static int win32_start_timer(struct qemu_alarm_timer *t);
905
static void win32_stop_timer(struct qemu_alarm_timer *t);
906
static void win32_rearm_timer(struct qemu_alarm_timer *t);
907

    
908
#else
909

    
910
static int unix_start_timer(struct qemu_alarm_timer *t);
911
static void unix_stop_timer(struct qemu_alarm_timer *t);
912

    
913
#ifdef __linux__
914

    
915
static int dynticks_start_timer(struct qemu_alarm_timer *t);
916
static void dynticks_stop_timer(struct qemu_alarm_timer *t);
917
static void dynticks_rearm_timer(struct qemu_alarm_timer *t);
918

    
919
static int hpet_start_timer(struct qemu_alarm_timer *t);
920
static void hpet_stop_timer(struct qemu_alarm_timer *t);
921

    
922
static int rtc_start_timer(struct qemu_alarm_timer *t);
923
static void rtc_stop_timer(struct qemu_alarm_timer *t);
924

    
925
#endif /* __linux__ */
926

    
927
#endif /* _WIN32 */
928

    
929
/* Correlation between real and virtual time is always going to be
930
   fairly approximate, so ignore small variation.
931
   When the guest is idle real and virtual time will be aligned in
932
   the IO wait loop.  */
933
#define ICOUNT_WOBBLE (QEMU_TIMER_BASE / 10)
934

    
935
static void icount_adjust(void)
936
{
937
    int64_t cur_time;
938
    int64_t cur_icount;
939
    int64_t delta;
940
    static int64_t last_delta;
941
    /* If the VM is not running, then do nothing.  */
942
    if (!vm_running)
943
        return;
944

    
945
    cur_time = cpu_get_clock();
946
    cur_icount = qemu_get_clock(vm_clock);
947
    delta = cur_icount - cur_time;
948
    /* FIXME: This is a very crude algorithm, somewhat prone to oscillation.  */
949
    if (delta > 0
950
        && last_delta + ICOUNT_WOBBLE < delta * 2
951
        && icount_time_shift > 0) {
952
        /* The guest is getting too far ahead.  Slow time down.  */
953
        icount_time_shift--;
954
    }
955
    if (delta < 0
956
        && last_delta - ICOUNT_WOBBLE > delta * 2
957
        && icount_time_shift < MAX_ICOUNT_SHIFT) {
958
        /* The guest is getting too far behind.  Speed time up.  */
959
        icount_time_shift++;
960
    }
961
    last_delta = delta;
962
    qemu_icount_bias = cur_icount - (qemu_icount << icount_time_shift);
963
}
964

    
965
static void icount_adjust_rt(void * opaque)
966
{
967
    qemu_mod_timer(icount_rt_timer,
968
                   qemu_get_clock(rt_clock) + 1000);
969
    icount_adjust();
970
}
971

    
972
static void icount_adjust_vm(void * opaque)
973
{
974
    qemu_mod_timer(icount_vm_timer,
975
                   qemu_get_clock(vm_clock) + QEMU_TIMER_BASE / 10);
976
    icount_adjust();
977
}
978

    
979
static void init_icount_adjust(void)
980
{
981
    /* Have both realtime and virtual time triggers for speed adjustment.
982
       The realtime trigger catches emulated time passing too slowly,
983
       the virtual time trigger catches emulated time passing too fast.
984
       Realtime triggers occur even when idle, so use them less frequently
985
       than VM triggers.  */
986
    icount_rt_timer = qemu_new_timer(rt_clock, icount_adjust_rt, NULL);
987
    qemu_mod_timer(icount_rt_timer,
988
                   qemu_get_clock(rt_clock) + 1000);
989
    icount_vm_timer = qemu_new_timer(vm_clock, icount_adjust_vm, NULL);
990
    qemu_mod_timer(icount_vm_timer,
991
                   qemu_get_clock(vm_clock) + QEMU_TIMER_BASE / 10);
992
}
993

    
994
static struct qemu_alarm_timer alarm_timers[] = {
995
#ifndef _WIN32
996
#ifdef __linux__
997
    {"dynticks", ALARM_FLAG_DYNTICKS, dynticks_start_timer,
998
     dynticks_stop_timer, dynticks_rearm_timer, NULL},
999
    /* HPET - if available - is preferred */
1000
    {"hpet", 0, hpet_start_timer, hpet_stop_timer, NULL, NULL},
1001
    /* ...otherwise try RTC */
1002
    {"rtc", 0, rtc_start_timer, rtc_stop_timer, NULL, NULL},
1003
#endif
1004
    {"unix", 0, unix_start_timer, unix_stop_timer, NULL, NULL},
1005
#else
1006
    {"dynticks", ALARM_FLAG_DYNTICKS, win32_start_timer,
1007
     win32_stop_timer, win32_rearm_timer, &alarm_win32_data},
1008
    {"win32", 0, win32_start_timer,
1009
     win32_stop_timer, NULL, &alarm_win32_data},
1010
#endif
1011
    {NULL, }
1012
};
1013

    
1014
static void show_available_alarms(void)
1015
{
1016
    int i;
1017

    
1018
    printf("Available alarm timers, in order of precedence:\n");
1019
    for (i = 0; alarm_timers[i].name; i++)
1020
        printf("%s\n", alarm_timers[i].name);
1021
}
1022

    
1023
static void configure_alarms(char const *opt)
1024
{
1025
    int i;
1026
    int cur = 0;
1027
    int count = (sizeof(alarm_timers) / sizeof(*alarm_timers)) - 1;
1028
    char *arg;
1029
    char *name;
1030
    struct qemu_alarm_timer tmp;
1031

    
1032
    if (!strcmp(opt, "?")) {
1033
        show_available_alarms();
1034
        exit(0);
1035
    }
1036

    
1037
    arg = strdup(opt);
1038

    
1039
    /* Reorder the array */
1040
    name = strtok(arg, ",");
1041
    while (name) {
1042
        for (i = 0; i < count && alarm_timers[i].name; i++) {
1043
            if (!strcmp(alarm_timers[i].name, name))
1044
                break;
1045
        }
1046

    
1047
        if (i == count) {
1048
            fprintf(stderr, "Unknown clock %s\n", name);
1049
            goto next;
1050
        }
1051

    
1052
        if (i < cur)
1053
            /* Ignore */
1054
            goto next;
1055

    
1056
        /* Swap */
1057
        tmp = alarm_timers[i];
1058
        alarm_timers[i] = alarm_timers[cur];
1059
        alarm_timers[cur] = tmp;
1060

    
1061
        cur++;
1062
next:
1063
        name = strtok(NULL, ",");
1064
    }
1065

    
1066
    free(arg);
1067

    
1068
    if (cur) {
1069
        /* Disable remaining timers */
1070
        for (i = cur; i < count; i++)
1071
            alarm_timers[i].name = NULL;
1072
    } else {
1073
        show_available_alarms();
1074
        exit(1);
1075
    }
1076
}
1077

    
1078
QEMUClock *rt_clock;
1079
QEMUClock *vm_clock;
1080

    
1081
static QEMUTimer *active_timers[2];
1082

    
1083
static QEMUClock *qemu_new_clock(int type)
1084
{
1085
    QEMUClock *clock;
1086
    clock = qemu_mallocz(sizeof(QEMUClock));
1087
    if (!clock)
1088
        return NULL;
1089
    clock->type = type;
1090
    return clock;
1091
}
1092

    
1093
QEMUTimer *qemu_new_timer(QEMUClock *clock, QEMUTimerCB *cb, void *opaque)
1094
{
1095
    QEMUTimer *ts;
1096

    
1097
    ts = qemu_mallocz(sizeof(QEMUTimer));
1098
    ts->clock = clock;
1099
    ts->cb = cb;
1100
    ts->opaque = opaque;
1101
    return ts;
1102
}
1103

    
1104
void qemu_free_timer(QEMUTimer *ts)
1105
{
1106
    qemu_free(ts);
1107
}
1108

    
1109
/* stop a timer, but do not dealloc it */
1110
void qemu_del_timer(QEMUTimer *ts)
1111
{
1112
    QEMUTimer **pt, *t;
1113

    
1114
    /* NOTE: this code must be signal safe because
1115
       qemu_timer_expired() can be called from a signal. */
1116
    pt = &active_timers[ts->clock->type];
1117
    for(;;) {
1118
        t = *pt;
1119
        if (!t)
1120
            break;
1121
        if (t == ts) {
1122
            *pt = t->next;
1123
            break;
1124
        }
1125
        pt = &t->next;
1126
    }
1127
}
1128

    
1129
/* modify the current timer so that it will be fired when current_time
1130
   >= expire_time. The corresponding callback will be called. */
1131
void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time)
1132
{
1133
    QEMUTimer **pt, *t;
1134

    
1135
    qemu_del_timer(ts);
1136

    
1137
    /* add the timer in the sorted list */
1138
    /* NOTE: this code must be signal safe because
1139
       qemu_timer_expired() can be called from a signal. */
1140
    pt = &active_timers[ts->clock->type];
1141
    for(;;) {
1142
        t = *pt;
1143
        if (!t)
1144
            break;
1145
        if (t->expire_time > expire_time)
1146
            break;
1147
        pt = &t->next;
1148
    }
1149
    ts->expire_time = expire_time;
1150
    ts->next = *pt;
1151
    *pt = ts;
1152

    
1153
    /* Rearm if necessary  */
1154
    if (pt == &active_timers[ts->clock->type]) {
1155
        if ((alarm_timer->flags & ALARM_FLAG_EXPIRED) == 0) {
1156
            qemu_rearm_alarm_timer(alarm_timer);
1157
        }
1158
        /* Interrupt execution to force deadline recalculation.  */
1159
        if (use_icount && cpu_single_env) {
1160
            cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
1161
        }
1162
    }
1163
}
1164

    
1165
int qemu_timer_pending(QEMUTimer *ts)
1166
{
1167
    QEMUTimer *t;
1168
    for(t = active_timers[ts->clock->type]; t != NULL; t = t->next) {
1169
        if (t == ts)
1170
            return 1;
1171
    }
1172
    return 0;
1173
}
1174

    
1175
static inline int qemu_timer_expired(QEMUTimer *timer_head, int64_t current_time)
1176
{
1177
    if (!timer_head)
1178
        return 0;
1179
    return (timer_head->expire_time <= current_time);
1180
}
1181

    
1182
static void qemu_run_timers(QEMUTimer **ptimer_head, int64_t current_time)
1183
{
1184
    QEMUTimer *ts;
1185

    
1186
    for(;;) {
1187
        ts = *ptimer_head;
1188
        if (!ts || ts->expire_time > current_time)
1189
            break;
1190
        /* remove timer from the list before calling the callback */
1191
        *ptimer_head = ts->next;
1192
        ts->next = NULL;
1193

    
1194
        /* run the callback (the timer list can be modified) */
1195
        ts->cb(ts->opaque);
1196
    }
1197
}
1198

    
1199
int64_t qemu_get_clock(QEMUClock *clock)
1200
{
1201
    switch(clock->type) {
1202
    case QEMU_TIMER_REALTIME:
1203
        return get_clock() / 1000000;
1204
    default:
1205
    case QEMU_TIMER_VIRTUAL:
1206
        if (use_icount) {
1207
            return cpu_get_icount();
1208
        } else {
1209
            return cpu_get_clock();
1210
        }
1211
    }
1212
}
1213

    
1214
static void init_timers(void)
1215
{
1216
    init_get_clock();
1217
    ticks_per_sec = QEMU_TIMER_BASE;
1218
    rt_clock = qemu_new_clock(QEMU_TIMER_REALTIME);
1219
    vm_clock = qemu_new_clock(QEMU_TIMER_VIRTUAL);
1220
}
1221

    
1222
/* save a timer */
1223
void qemu_put_timer(QEMUFile *f, QEMUTimer *ts)
1224
{
1225
    uint64_t expire_time;
1226

    
1227
    if (qemu_timer_pending(ts)) {
1228
        expire_time = ts->expire_time;
1229
    } else {
1230
        expire_time = -1;
1231
    }
1232
    qemu_put_be64(f, expire_time);
1233
}
1234

    
1235
void qemu_get_timer(QEMUFile *f, QEMUTimer *ts)
1236
{
1237
    uint64_t expire_time;
1238

    
1239
    expire_time = qemu_get_be64(f);
1240
    if (expire_time != -1) {
1241
        qemu_mod_timer(ts, expire_time);
1242
    } else {
1243
        qemu_del_timer(ts);
1244
    }
1245
}
1246

    
1247
static void timer_save(QEMUFile *f, void *opaque)
1248
{
1249
    if (cpu_ticks_enabled) {
1250
        hw_error("cannot save state if virtual timers are running");
1251
    }
1252
    qemu_put_be64(f, cpu_ticks_offset);
1253
    qemu_put_be64(f, ticks_per_sec);
1254
    qemu_put_be64(f, cpu_clock_offset);
1255
}
1256

    
1257
static int timer_load(QEMUFile *f, void *opaque, int version_id)
1258
{
1259
    if (version_id != 1 && version_id != 2)
1260
        return -EINVAL;
1261
    if (cpu_ticks_enabled) {
1262
        return -EINVAL;
1263
    }
1264
    cpu_ticks_offset=qemu_get_be64(f);
1265
    ticks_per_sec=qemu_get_be64(f);
1266
    if (version_id == 2) {
1267
        cpu_clock_offset=qemu_get_be64(f);
1268
    }
1269
    return 0;
1270
}
1271

    
1272
#ifdef _WIN32
1273
void CALLBACK host_alarm_handler(UINT uTimerID, UINT uMsg,
1274
                                 DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2)
1275
#else
1276
static void host_alarm_handler(int host_signum)
1277
#endif
1278
{
1279
#if 0
1280
#define DISP_FREQ 1000
1281
    {
1282
        static int64_t delta_min = INT64_MAX;
1283
        static int64_t delta_max, delta_cum, last_clock, delta, ti;
1284
        static int count;
1285
        ti = qemu_get_clock(vm_clock);
1286
        if (last_clock != 0) {
1287
            delta = ti - last_clock;
1288
            if (delta < delta_min)
1289
                delta_min = delta;
1290
            if (delta > delta_max)
1291
                delta_max = delta;
1292
            delta_cum += delta;
1293
            if (++count == DISP_FREQ) {
1294
                printf("timer: min=%" PRId64 " us max=%" PRId64 " us avg=%" PRId64 " us avg_freq=%0.3f Hz\n",
1295
                       muldiv64(delta_min, 1000000, ticks_per_sec),
1296
                       muldiv64(delta_max, 1000000, ticks_per_sec),
1297
                       muldiv64(delta_cum, 1000000 / DISP_FREQ, ticks_per_sec),
1298
                       (double)ticks_per_sec / ((double)delta_cum / DISP_FREQ));
1299
                count = 0;
1300
                delta_min = INT64_MAX;
1301
                delta_max = 0;
1302
                delta_cum = 0;
1303
            }
1304
        }
1305
        last_clock = ti;
1306
    }
1307
#endif
1308
    if (alarm_has_dynticks(alarm_timer) ||
1309
        (!use_icount &&
1310
            qemu_timer_expired(active_timers[QEMU_TIMER_VIRTUAL],
1311
                               qemu_get_clock(vm_clock))) ||
1312
        qemu_timer_expired(active_timers[QEMU_TIMER_REALTIME],
1313
                           qemu_get_clock(rt_clock))) {
1314
#ifdef _WIN32
1315
        struct qemu_alarm_win32 *data = ((struct qemu_alarm_timer*)dwUser)->priv;
1316
        SetEvent(data->host_alarm);
1317
#endif
1318
        CPUState *env = next_cpu;
1319

    
1320
        alarm_timer->flags |= ALARM_FLAG_EXPIRED;
1321

    
1322
        if (env) {
1323
            /* stop the currently executing cpu because a timer occured */
1324
            cpu_interrupt(env, CPU_INTERRUPT_EXIT);
1325
#ifdef USE_KQEMU
1326
            if (env->kqemu_enabled) {
1327
                kqemu_cpu_interrupt(env);
1328
            }
1329
#endif
1330
        }
1331
        event_pending = 1;
1332
    }
1333
}
1334

    
1335
static int64_t qemu_next_deadline(void)
1336
{
1337
    int64_t delta;
1338

    
1339
    if (active_timers[QEMU_TIMER_VIRTUAL]) {
1340
        delta = active_timers[QEMU_TIMER_VIRTUAL]->expire_time -
1341
                     qemu_get_clock(vm_clock);
1342
    } else {
1343
        /* To avoid problems with overflow limit this to 2^32.  */
1344
        delta = INT32_MAX;
1345
    }
1346

    
1347
    if (delta < 0)
1348
        delta = 0;
1349

    
1350
    return delta;
1351
}
1352

    
1353
static uint64_t qemu_next_deadline_dyntick(void)
1354
{
1355
    int64_t delta;
1356
    int64_t rtdelta;
1357

    
1358
    if (use_icount)
1359
        delta = INT32_MAX;
1360
    else
1361
        delta = (qemu_next_deadline() + 999) / 1000;
1362

    
1363
    if (active_timers[QEMU_TIMER_REALTIME]) {
1364
        rtdelta = (active_timers[QEMU_TIMER_REALTIME]->expire_time -
1365
                 qemu_get_clock(rt_clock))*1000;
1366
        if (rtdelta < delta)
1367
            delta = rtdelta;
1368
    }
1369

    
1370
    if (delta < MIN_TIMER_REARM_US)
1371
        delta = MIN_TIMER_REARM_US;
1372

    
1373
    return delta;
1374
}
1375

    
1376
#ifndef _WIN32
1377

    
1378
#if defined(__linux__)
1379

    
1380
#define RTC_FREQ 1024
1381

    
1382
static void enable_sigio_timer(int fd)
1383
{
1384
    struct sigaction act;
1385

    
1386
    /* timer signal */
1387
    sigfillset(&act.sa_mask);
1388
    act.sa_flags = 0;
1389
    act.sa_handler = host_alarm_handler;
1390

    
1391
    sigaction(SIGIO, &act, NULL);
1392
    fcntl(fd, F_SETFL, O_ASYNC);
1393
    fcntl(fd, F_SETOWN, getpid());
1394
}
1395

    
1396
static int hpet_start_timer(struct qemu_alarm_timer *t)
1397
{
1398
    struct hpet_info info;
1399
    int r, fd;
1400

    
1401
    fd = open("/dev/hpet", O_RDONLY);
1402
    if (fd < 0)
1403
        return -1;
1404

    
1405
    /* Set frequency */
1406
    r = ioctl(fd, HPET_IRQFREQ, RTC_FREQ);
1407
    if (r < 0) {
1408
        fprintf(stderr, "Could not configure '/dev/hpet' to have a 1024Hz timer. This is not a fatal\n"
1409
                "error, but for better emulation accuracy type:\n"
1410
                "'echo 1024 > /proc/sys/dev/hpet/max-user-freq' as root.\n");
1411
        goto fail;
1412
    }
1413

    
1414
    /* Check capabilities */
1415
    r = ioctl(fd, HPET_INFO, &info);
1416
    if (r < 0)
1417
        goto fail;
1418

    
1419
    /* Enable periodic mode */
1420
    r = ioctl(fd, HPET_EPI, 0);
1421
    if (info.hi_flags && (r < 0))
1422
        goto fail;
1423

    
1424
    /* Enable interrupt */
1425
    r = ioctl(fd, HPET_IE_ON, 0);
1426
    if (r < 0)
1427
        goto fail;
1428

    
1429
    enable_sigio_timer(fd);
1430
    t->priv = (void *)(long)fd;
1431

    
1432
    return 0;
1433
fail:
1434
    close(fd);
1435
    return -1;
1436
}
1437

    
1438
static void hpet_stop_timer(struct qemu_alarm_timer *t)
1439
{
1440
    int fd = (long)t->priv;
1441

    
1442
    close(fd);
1443
}
1444

    
1445
static int rtc_start_timer(struct qemu_alarm_timer *t)
1446
{
1447
    int rtc_fd;
1448
    unsigned long current_rtc_freq = 0;
1449

    
1450
    TFR(rtc_fd = open("/dev/rtc", O_RDONLY));
1451
    if (rtc_fd < 0)
1452
        return -1;
1453
    ioctl(rtc_fd, RTC_IRQP_READ, &current_rtc_freq);
1454
    if (current_rtc_freq != RTC_FREQ &&
1455
        ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
1456
        fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
1457
                "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
1458
                "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
1459
        goto fail;
1460
    }
1461
    if (ioctl(rtc_fd, RTC_PIE_ON, 0) < 0) {
1462
    fail:
1463
        close(rtc_fd);
1464
        return -1;
1465
    }
1466

    
1467
    enable_sigio_timer(rtc_fd);
1468

    
1469
    t->priv = (void *)(long)rtc_fd;
1470

    
1471
    return 0;
1472
}
1473

    
1474
static void rtc_stop_timer(struct qemu_alarm_timer *t)
1475
{
1476
    int rtc_fd = (long)t->priv;
1477

    
1478
    close(rtc_fd);
1479
}
1480

    
1481
static int dynticks_start_timer(struct qemu_alarm_timer *t)
1482
{
1483
    struct sigevent ev;
1484
    timer_t host_timer;
1485
    struct sigaction act;
1486

    
1487
    sigfillset(&act.sa_mask);
1488
    act.sa_flags = 0;
1489
    act.sa_handler = host_alarm_handler;
1490

    
1491
    sigaction(SIGALRM, &act, NULL);
1492

    
1493
    ev.sigev_value.sival_int = 0;
1494
    ev.sigev_notify = SIGEV_SIGNAL;
1495
    ev.sigev_signo = SIGALRM;
1496

    
1497
    if (timer_create(CLOCK_REALTIME, &ev, &host_timer)) {
1498
        perror("timer_create");
1499

    
1500
        /* disable dynticks */
1501
        fprintf(stderr, "Dynamic Ticks disabled\n");
1502

    
1503
        return -1;
1504
    }
1505

    
1506
    t->priv = (void *)host_timer;
1507

    
1508
    return 0;
1509
}
1510

    
1511
static void dynticks_stop_timer(struct qemu_alarm_timer *t)
1512
{
1513
    timer_t host_timer = (timer_t)t->priv;
1514

    
1515
    timer_delete(host_timer);
1516
}
1517

    
1518
static void dynticks_rearm_timer(struct qemu_alarm_timer *t)
1519
{
1520
    timer_t host_timer = (timer_t)t->priv;
1521
    struct itimerspec timeout;
1522
    int64_t nearest_delta_us = INT64_MAX;
1523
    int64_t current_us;
1524

    
1525
    if (!active_timers[QEMU_TIMER_REALTIME] &&
1526
                !active_timers[QEMU_TIMER_VIRTUAL])
1527
        return;
1528

    
1529
    nearest_delta_us = qemu_next_deadline_dyntick();
1530

    
1531
    /* check whether a timer is already running */
1532
    if (timer_gettime(host_timer, &timeout)) {
1533
        perror("gettime");
1534
        fprintf(stderr, "Internal timer error: aborting\n");
1535
        exit(1);
1536
    }
1537
    current_us = timeout.it_value.tv_sec * 1000000 + timeout.it_value.tv_nsec/1000;
1538
    if (current_us && current_us <= nearest_delta_us)
1539
        return;
1540

    
1541
    timeout.it_interval.tv_sec = 0;
1542
    timeout.it_interval.tv_nsec = 0; /* 0 for one-shot timer */
1543
    timeout.it_value.tv_sec =  nearest_delta_us / 1000000;
1544
    timeout.it_value.tv_nsec = (nearest_delta_us % 1000000) * 1000;
1545
    if (timer_settime(host_timer, 0 /* RELATIVE */, &timeout, NULL)) {
1546
        perror("settime");
1547
        fprintf(stderr, "Internal timer error: aborting\n");
1548
        exit(1);
1549
    }
1550
}
1551

    
1552
#endif /* defined(__linux__) */
1553

    
1554
static int unix_start_timer(struct qemu_alarm_timer *t)
1555
{
1556
    struct sigaction act;
1557
    struct itimerval itv;
1558
    int err;
1559

    
1560
    /* timer signal */
1561
    sigfillset(&act.sa_mask);
1562
    act.sa_flags = 0;
1563
    act.sa_handler = host_alarm_handler;
1564

    
1565
    sigaction(SIGALRM, &act, NULL);
1566

    
1567
    itv.it_interval.tv_sec = 0;
1568
    /* for i386 kernel 2.6 to get 1 ms */
1569
    itv.it_interval.tv_usec = 999;
1570
    itv.it_value.tv_sec = 0;
1571
    itv.it_value.tv_usec = 10 * 1000;
1572

    
1573
    err = setitimer(ITIMER_REAL, &itv, NULL);
1574
    if (err)
1575
        return -1;
1576

    
1577
    return 0;
1578
}
1579

    
1580
static void unix_stop_timer(struct qemu_alarm_timer *t)
1581
{
1582
    struct itimerval itv;
1583

    
1584
    memset(&itv, 0, sizeof(itv));
1585
    setitimer(ITIMER_REAL, &itv, NULL);
1586
}
1587

    
1588
#endif /* !defined(_WIN32) */
1589

    
1590
#ifdef _WIN32
1591

    
1592
static int win32_start_timer(struct qemu_alarm_timer *t)
1593
{
1594
    TIMECAPS tc;
1595
    struct qemu_alarm_win32 *data = t->priv;
1596
    UINT flags;
1597

    
1598
    data->host_alarm = CreateEvent(NULL, FALSE, FALSE, NULL);
1599
    if (!data->host_alarm) {
1600
        perror("Failed CreateEvent");
1601
        return -1;
1602
    }
1603

    
1604
    memset(&tc, 0, sizeof(tc));
1605
    timeGetDevCaps(&tc, sizeof(tc));
1606

    
1607
    if (data->period < tc.wPeriodMin)
1608
        data->period = tc.wPeriodMin;
1609

    
1610
    timeBeginPeriod(data->period);
1611

    
1612
    flags = TIME_CALLBACK_FUNCTION;
1613
    if (alarm_has_dynticks(t))
1614
        flags |= TIME_ONESHOT;
1615
    else
1616
        flags |= TIME_PERIODIC;
1617

    
1618
    data->timerId = timeSetEvent(1,         // interval (ms)
1619
                        data->period,       // resolution
1620
                        host_alarm_handler, // function
1621
                        (DWORD)t,           // parameter
1622
                        flags);
1623

    
1624
    if (!data->timerId) {
1625
        perror("Failed to initialize win32 alarm timer");
1626

    
1627
        timeEndPeriod(data->period);
1628
        CloseHandle(data->host_alarm);
1629
        return -1;
1630
    }
1631

    
1632
    qemu_add_wait_object(data->host_alarm, NULL, NULL);
1633

    
1634
    return 0;
1635
}
1636

    
1637
static void win32_stop_timer(struct qemu_alarm_timer *t)
1638
{
1639
    struct qemu_alarm_win32 *data = t->priv;
1640

    
1641
    timeKillEvent(data->timerId);
1642
    timeEndPeriod(data->period);
1643

    
1644
    CloseHandle(data->host_alarm);
1645
}
1646

    
1647
static void win32_rearm_timer(struct qemu_alarm_timer *t)
1648
{
1649
    struct qemu_alarm_win32 *data = t->priv;
1650
    uint64_t nearest_delta_us;
1651

    
1652
    if (!active_timers[QEMU_TIMER_REALTIME] &&
1653
                !active_timers[QEMU_TIMER_VIRTUAL])
1654
        return;
1655

    
1656
    nearest_delta_us = qemu_next_deadline_dyntick();
1657
    nearest_delta_us /= 1000;
1658

    
1659
    timeKillEvent(data->timerId);
1660

    
1661
    data->timerId = timeSetEvent(1,
1662
                        data->period,
1663
                        host_alarm_handler,
1664
                        (DWORD)t,
1665
                        TIME_ONESHOT | TIME_PERIODIC);
1666

    
1667
    if (!data->timerId) {
1668
        perror("Failed to re-arm win32 alarm timer");
1669

    
1670
        timeEndPeriod(data->period);
1671
        CloseHandle(data->host_alarm);
1672
        exit(1);
1673
    }
1674
}
1675

    
1676
#endif /* _WIN32 */
1677

    
1678
static void init_timer_alarm(void)
1679
{
1680
    struct qemu_alarm_timer *t;
1681
    int i, err = -1;
1682

    
1683
    for (i = 0; alarm_timers[i].name; i++) {
1684
        t = &alarm_timers[i];
1685

    
1686
        err = t->start(t);
1687
        if (!err)
1688
            break;
1689
    }
1690

    
1691
    if (err) {
1692
        fprintf(stderr, "Unable to find any suitable alarm timer.\n");
1693
        fprintf(stderr, "Terminating\n");
1694
        exit(1);
1695
    }
1696

    
1697
    alarm_timer = t;
1698
}
1699

    
1700
static void quit_timers(void)
1701
{
1702
    alarm_timer->stop(alarm_timer);
1703
    alarm_timer = NULL;
1704
}
1705

    
1706
/***********************************************************/
1707
/* host time/date access */
1708
void qemu_get_timedate(struct tm *tm, int offset)
1709
{
1710
    time_t ti;
1711
    struct tm *ret;
1712

    
1713
    time(&ti);
1714
    ti += offset;
1715
    if (rtc_date_offset == -1) {
1716
        if (rtc_utc)
1717
            ret = gmtime(&ti);
1718
        else
1719
            ret = localtime(&ti);
1720
    } else {
1721
        ti -= rtc_date_offset;
1722
        ret = gmtime(&ti);
1723
    }
1724

    
1725
    memcpy(tm, ret, sizeof(struct tm));
1726
}
1727

    
1728
int qemu_timedate_diff(struct tm *tm)
1729
{
1730
    time_t seconds;
1731

    
1732
    if (rtc_date_offset == -1)
1733
        if (rtc_utc)
1734
            seconds = mktimegm(tm);
1735
        else
1736
            seconds = mktime(tm);
1737
    else
1738
        seconds = mktimegm(tm) + rtc_date_offset;
1739

    
1740
    return seconds - time(NULL);
1741
}
1742

    
1743
/***********************************************************/
1744
/* character device */
1745

    
1746
static void qemu_chr_event(CharDriverState *s, int event)
1747
{
1748
    if (!s->chr_event)
1749
        return;
1750
    s->chr_event(s->handler_opaque, event);
1751
}
1752

    
1753
static void qemu_chr_reset_bh(void *opaque)
1754
{
1755
    CharDriverState *s = opaque;
1756
    qemu_chr_event(s, CHR_EVENT_RESET);
1757
    qemu_bh_delete(s->bh);
1758
    s->bh = NULL;
1759
}
1760

    
1761
void qemu_chr_reset(CharDriverState *s)
1762
{
1763
    if (s->bh == NULL) {
1764
        s->bh = qemu_bh_new(qemu_chr_reset_bh, s);
1765
        qemu_bh_schedule(s->bh);
1766
    }
1767
}
1768

    
1769
int qemu_chr_write(CharDriverState *s, const uint8_t *buf, int len)
1770
{
1771
    return s->chr_write(s, buf, len);
1772
}
1773

    
1774
int qemu_chr_ioctl(CharDriverState *s, int cmd, void *arg)
1775
{
1776
    if (!s->chr_ioctl)
1777
        return -ENOTSUP;
1778
    return s->chr_ioctl(s, cmd, arg);
1779
}
1780

    
1781
int qemu_chr_can_read(CharDriverState *s)
1782
{
1783
    if (!s->chr_can_read)
1784
        return 0;
1785
    return s->chr_can_read(s->handler_opaque);
1786
}
1787

    
1788
void qemu_chr_read(CharDriverState *s, uint8_t *buf, int len)
1789
{
1790
    s->chr_read(s->handler_opaque, buf, len);
1791
}
1792

    
1793
void qemu_chr_accept_input(CharDriverState *s)
1794
{
1795
    if (s->chr_accept_input)
1796
        s->chr_accept_input(s);
1797
}
1798

    
1799
void qemu_chr_printf(CharDriverState *s, const char *fmt, ...)
1800
{
1801
    char buf[4096];
1802
    va_list ap;
1803
    va_start(ap, fmt);
1804
    vsnprintf(buf, sizeof(buf), fmt, ap);
1805
    qemu_chr_write(s, (uint8_t *)buf, strlen(buf));
1806
    va_end(ap);
1807
}
1808

    
1809
void qemu_chr_send_event(CharDriverState *s, int event)
1810
{
1811
    if (s->chr_send_event)
1812
        s->chr_send_event(s, event);
1813
}
1814

    
1815
void qemu_chr_add_handlers(CharDriverState *s,
1816
                           IOCanRWHandler *fd_can_read,
1817
                           IOReadHandler *fd_read,
1818
                           IOEventHandler *fd_event,
1819
                           void *opaque)
1820
{
1821
    s->chr_can_read = fd_can_read;
1822
    s->chr_read = fd_read;
1823
    s->chr_event = fd_event;
1824
    s->handler_opaque = opaque;
1825
    if (s->chr_update_read_handler)
1826
        s->chr_update_read_handler(s);
1827
}
1828

    
1829
static int null_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
1830
{
1831
    return len;
1832
}
1833

    
1834
static CharDriverState *qemu_chr_open_null(void)
1835
{
1836
    CharDriverState *chr;
1837

    
1838
    chr = qemu_mallocz(sizeof(CharDriverState));
1839
    if (!chr)
1840
        return NULL;
1841
    chr->chr_write = null_chr_write;
1842
    return chr;
1843
}
1844

    
1845
/* MUX driver for serial I/O splitting */
1846
static int term_timestamps;
1847
static int64_t term_timestamps_start;
1848
#define MAX_MUX 4
1849
#define MUX_BUFFER_SIZE 32        /* Must be a power of 2.  */
1850
#define MUX_BUFFER_MASK (MUX_BUFFER_SIZE - 1)
1851
typedef struct {
1852
    IOCanRWHandler *chr_can_read[MAX_MUX];
1853
    IOReadHandler *chr_read[MAX_MUX];
1854
    IOEventHandler *chr_event[MAX_MUX];
1855
    void *ext_opaque[MAX_MUX];
1856
    CharDriverState *drv;
1857
    unsigned char buffer[MUX_BUFFER_SIZE];
1858
    int prod;
1859
    int cons;
1860
    int mux_cnt;
1861
    int term_got_escape;
1862
    int max_size;
1863
} MuxDriver;
1864

    
1865

    
1866
static int mux_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
1867
{
1868
    MuxDriver *d = chr->opaque;
1869
    int ret;
1870
    if (!term_timestamps) {
1871
        ret = d->drv->chr_write(d->drv, buf, len);
1872
    } else {
1873
        int i;
1874

    
1875
        ret = 0;
1876
        for(i = 0; i < len; i++) {
1877
            ret += d->drv->chr_write(d->drv, buf+i, 1);
1878
            if (buf[i] == '\n') {
1879
                char buf1[64];
1880
                int64_t ti;
1881
                int secs;
1882

    
1883
                ti = get_clock();
1884
                if (term_timestamps_start == -1)
1885
                    term_timestamps_start = ti;
1886
                ti -= term_timestamps_start;
1887
                secs = ti / 1000000000;
1888
                snprintf(buf1, sizeof(buf1),
1889
                         "[%02d:%02d:%02d.%03d] ",
1890
                         secs / 3600,
1891
                         (secs / 60) % 60,
1892
                         secs % 60,
1893
                         (int)((ti / 1000000) % 1000));
1894
                d->drv->chr_write(d->drv, (uint8_t *)buf1, strlen(buf1));
1895
            }
1896
        }
1897
    }
1898
    return ret;
1899
}
1900

    
1901
static const char * const mux_help[] = {
1902
    "% h    print this help\n\r",
1903
    "% x    exit emulator\n\r",
1904
    "% s    save disk data back to file (if -snapshot)\n\r",
1905
    "% t    toggle console timestamps\n\r"
1906
    "% b    send break (magic sysrq)\n\r",
1907
    "% c    switch between console and monitor\n\r",
1908
    "% %  sends %\n\r",
1909
    NULL
1910
};
1911

    
1912
static int term_escape_char = 0x01; /* ctrl-a is used for escape */
1913
static void mux_print_help(CharDriverState *chr)
1914
{
1915
    int i, j;
1916
    char ebuf[15] = "Escape-Char";
1917
    char cbuf[50] = "\n\r";
1918

    
1919
    if (term_escape_char > 0 && term_escape_char < 26) {
1920
        snprintf(cbuf, sizeof(cbuf), "\n\r");
1921
        snprintf(ebuf, sizeof(ebuf), "C-%c", term_escape_char - 1 + 'a');
1922
    } else {
1923
        snprintf(cbuf, sizeof(cbuf),
1924
                 "\n\rEscape-Char set to Ascii: 0x%02x\n\r\n\r",
1925
                 term_escape_char);
1926
    }
1927
    chr->chr_write(chr, (uint8_t *)cbuf, strlen(cbuf));
1928
    for (i = 0; mux_help[i] != NULL; i++) {
1929
        for (j=0; mux_help[i][j] != '\0'; j++) {
1930
            if (mux_help[i][j] == '%')
1931
                chr->chr_write(chr, (uint8_t *)ebuf, strlen(ebuf));
1932
            else
1933
                chr->chr_write(chr, (uint8_t *)&mux_help[i][j], 1);
1934
        }
1935
    }
1936
}
1937

    
1938
static int mux_proc_byte(CharDriverState *chr, MuxDriver *d, int ch)
1939
{
1940
    if (d->term_got_escape) {
1941
        d->term_got_escape = 0;
1942
        if (ch == term_escape_char)
1943
            goto send_char;
1944
        switch(ch) {
1945
        case '?':
1946
        case 'h':
1947
            mux_print_help(chr);
1948
            break;
1949
        case 'x':
1950
            {
1951
                 const char *term =  "QEMU: Terminated\n\r";
1952
                 chr->chr_write(chr,(uint8_t *)term,strlen(term));
1953
                 exit(0);
1954
                 break;
1955
            }
1956
        case 's':
1957
            {
1958
                int i;
1959
                for (i = 0; i < nb_drives; i++) {
1960
                        bdrv_commit(drives_table[i].bdrv);
1961
                }
1962
            }
1963
            break;
1964
        case 'b':
1965
            qemu_chr_event(chr, CHR_EVENT_BREAK);
1966
            break;
1967
        case 'c':
1968
            /* Switch to the next registered device */
1969
            chr->focus++;
1970
            if (chr->focus >= d->mux_cnt)
1971
                chr->focus = 0;
1972
            break;
1973
       case 't':
1974
           term_timestamps = !term_timestamps;
1975
           term_timestamps_start = -1;
1976
           break;
1977
        }
1978
    } else if (ch == term_escape_char) {
1979
        d->term_got_escape = 1;
1980
    } else {
1981
    send_char:
1982
        return 1;
1983
    }
1984
    return 0;
1985
}
1986

    
1987
static void mux_chr_accept_input(CharDriverState *chr)
1988
{
1989
    int m = chr->focus;
1990
    MuxDriver *d = chr->opaque;
1991

    
1992
    while (d->prod != d->cons &&
1993
           d->chr_can_read[m] &&
1994
           d->chr_can_read[m](d->ext_opaque[m])) {
1995
        d->chr_read[m](d->ext_opaque[m],
1996
                       &d->buffer[d->cons++ & MUX_BUFFER_MASK], 1);
1997
    }
1998
}
1999

    
2000
static int mux_chr_can_read(void *opaque)
2001
{
2002
    CharDriverState *chr = opaque;
2003
    MuxDriver *d = chr->opaque;
2004

    
2005
    if ((d->prod - d->cons) < MUX_BUFFER_SIZE)
2006
        return 1;
2007
    if (d->chr_can_read[chr->focus])
2008
        return d->chr_can_read[chr->focus](d->ext_opaque[chr->focus]);
2009
    return 0;
2010
}
2011

    
2012
static void mux_chr_read(void *opaque, const uint8_t *buf, int size)
2013
{
2014
    CharDriverState *chr = opaque;
2015
    MuxDriver *d = chr->opaque;
2016
    int m = chr->focus;
2017
    int i;
2018

    
2019
    mux_chr_accept_input (opaque);
2020

    
2021
    for(i = 0; i < size; i++)
2022
        if (mux_proc_byte(chr, d, buf[i])) {
2023
            if (d->prod == d->cons &&
2024
                d->chr_can_read[m] &&
2025
                d->chr_can_read[m](d->ext_opaque[m]))
2026
                d->chr_read[m](d->ext_opaque[m], &buf[i], 1);
2027
            else
2028
                d->buffer[d->prod++ & MUX_BUFFER_MASK] = buf[i];
2029
        }
2030
}
2031

    
2032
static void mux_chr_event(void *opaque, int event)
2033
{
2034
    CharDriverState *chr = opaque;
2035
    MuxDriver *d = chr->opaque;
2036
    int i;
2037

    
2038
    /* Send the event to all registered listeners */
2039
    for (i = 0; i < d->mux_cnt; i++)
2040
        if (d->chr_event[i])
2041
            d->chr_event[i](d->ext_opaque[i], event);
2042
}
2043

    
2044
static void mux_chr_update_read_handler(CharDriverState *chr)
2045
{
2046
    MuxDriver *d = chr->opaque;
2047

    
2048
    if (d->mux_cnt >= MAX_MUX) {
2049
        fprintf(stderr, "Cannot add I/O handlers, MUX array is full\n");
2050
        return;
2051
    }
2052
    d->ext_opaque[d->mux_cnt] = chr->handler_opaque;
2053
    d->chr_can_read[d->mux_cnt] = chr->chr_can_read;
2054
    d->chr_read[d->mux_cnt] = chr->chr_read;
2055
    d->chr_event[d->mux_cnt] = chr->chr_event;
2056
    /* Fix up the real driver with mux routines */
2057
    if (d->mux_cnt == 0) {
2058
        qemu_chr_add_handlers(d->drv, mux_chr_can_read, mux_chr_read,
2059
                              mux_chr_event, chr);
2060
    }
2061
    chr->focus = d->mux_cnt;
2062
    d->mux_cnt++;
2063
}
2064

    
2065
static CharDriverState *qemu_chr_open_mux(CharDriverState *drv)
2066
{
2067
    CharDriverState *chr;
2068
    MuxDriver *d;
2069

    
2070
    chr = qemu_mallocz(sizeof(CharDriverState));
2071
    if (!chr)
2072
        return NULL;
2073
    d = qemu_mallocz(sizeof(MuxDriver));
2074
    if (!d) {
2075
        free(chr);
2076
        return NULL;
2077
    }
2078

    
2079
    chr->opaque = d;
2080
    d->drv = drv;
2081
    chr->focus = -1;
2082
    chr->chr_write = mux_chr_write;
2083
    chr->chr_update_read_handler = mux_chr_update_read_handler;
2084
    chr->chr_accept_input = mux_chr_accept_input;
2085
    return chr;
2086
}
2087

    
2088

    
2089
#ifdef _WIN32
2090

    
2091
static void socket_cleanup(void)
2092
{
2093
    WSACleanup();
2094
}
2095

    
2096
static int socket_init(void)
2097
{
2098
    WSADATA Data;
2099
    int ret, err;
2100

    
2101
    ret = WSAStartup(MAKEWORD(2,2), &Data);
2102
    if (ret != 0) {
2103
        err = WSAGetLastError();
2104
        fprintf(stderr, "WSAStartup: %d\n", err);
2105
        return -1;
2106
    }
2107
    atexit(socket_cleanup);
2108
    return 0;
2109
}
2110

    
2111
static int send_all(int fd, const uint8_t *buf, int len1)
2112
{
2113
    int ret, len;
2114

    
2115
    len = len1;
2116
    while (len > 0) {
2117
        ret = send(fd, buf, len, 0);
2118
        if (ret < 0) {
2119
            int errno;
2120
            errno = WSAGetLastError();
2121
            if (errno != WSAEWOULDBLOCK) {
2122
                return -1;
2123
            }
2124
        } else if (ret == 0) {
2125
            break;
2126
        } else {
2127
            buf += ret;
2128
            len -= ret;
2129
        }
2130
    }
2131
    return len1 - len;
2132
}
2133

    
2134
void socket_set_nonblock(int fd)
2135
{
2136
    unsigned long opt = 1;
2137
    ioctlsocket(fd, FIONBIO, &opt);
2138
}
2139

    
2140
#else
2141

    
2142
static int unix_write(int fd, const uint8_t *buf, int len1)
2143
{
2144
    int ret, len;
2145

    
2146
    len = len1;
2147
    while (len > 0) {
2148
        ret = write(fd, buf, len);
2149
        if (ret < 0) {
2150
            if (errno != EINTR && errno != EAGAIN)
2151
                return -1;
2152
        } else if (ret == 0) {
2153
            break;
2154
        } else {
2155
            buf += ret;
2156
            len -= ret;
2157
        }
2158
    }
2159
    return len1 - len;
2160
}
2161

    
2162
static inline int send_all(int fd, const uint8_t *buf, int len1)
2163
{
2164
    return unix_write(fd, buf, len1);
2165
}
2166

    
2167
void socket_set_nonblock(int fd)
2168
{
2169
    int f;
2170
    f = fcntl(fd, F_GETFL);
2171
    fcntl(fd, F_SETFL, f | O_NONBLOCK);
2172
}
2173
#endif /* !_WIN32 */
2174

    
2175
#ifndef _WIN32
2176

    
2177
typedef struct {
2178
    int fd_in, fd_out;
2179
    int max_size;
2180
} FDCharDriver;
2181

    
2182
#define STDIO_MAX_CLIENTS 1
2183
static int stdio_nb_clients = 0;
2184

    
2185
static int fd_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
2186
{
2187
    FDCharDriver *s = chr->opaque;
2188
    return unix_write(s->fd_out, buf, len);
2189
}
2190

    
2191
static int fd_chr_read_poll(void *opaque)
2192
{
2193
    CharDriverState *chr = opaque;
2194
    FDCharDriver *s = chr->opaque;
2195

    
2196
    s->max_size = qemu_chr_can_read(chr);
2197
    return s->max_size;
2198
}
2199

    
2200
static void fd_chr_read(void *opaque)
2201
{
2202
    CharDriverState *chr = opaque;
2203
    FDCharDriver *s = chr->opaque;
2204
    int size, len;
2205
    uint8_t buf[1024];
2206

    
2207
    len = sizeof(buf);
2208
    if (len > s->max_size)
2209
        len = s->max_size;
2210
    if (len == 0)
2211
        return;
2212
    size = read(s->fd_in, buf, len);
2213
    if (size == 0) {
2214
        /* FD has been closed. Remove it from the active list.  */
2215
        qemu_set_fd_handler2(s->fd_in, NULL, NULL, NULL, NULL);
2216
        return;
2217
    }
2218
    if (size > 0) {
2219
        qemu_chr_read(chr, buf, size);
2220
    }
2221
}
2222

    
2223
static void fd_chr_update_read_handler(CharDriverState *chr)
2224
{
2225
    FDCharDriver *s = chr->opaque;
2226

    
2227
    if (s->fd_in >= 0) {
2228
        if (nographic && s->fd_in == 0) {
2229
        } else {
2230
            qemu_set_fd_handler2(s->fd_in, fd_chr_read_poll,
2231
                                 fd_chr_read, NULL, chr);
2232
        }
2233
    }
2234
}
2235

    
2236
static void fd_chr_close(struct CharDriverState *chr)
2237
{
2238
    FDCharDriver *s = chr->opaque;
2239

    
2240
    if (s->fd_in >= 0) {
2241
        if (nographic && s->fd_in == 0) {
2242
        } else {
2243
            qemu_set_fd_handler2(s->fd_in, NULL, NULL, NULL, NULL);
2244
        }
2245
    }
2246

    
2247
    qemu_free(s);
2248
}
2249

    
2250
/* open a character device to a unix fd */
2251
static CharDriverState *qemu_chr_open_fd(int fd_in, int fd_out)
2252
{
2253
    CharDriverState *chr;
2254
    FDCharDriver *s;
2255

    
2256
    chr = qemu_mallocz(sizeof(CharDriverState));
2257
    if (!chr)
2258
        return NULL;
2259
    s = qemu_mallocz(sizeof(FDCharDriver));
2260
    if (!s) {
2261
        free(chr);
2262
        return NULL;
2263
    }
2264
    s->fd_in = fd_in;
2265
    s->fd_out = fd_out;
2266
    chr->opaque = s;
2267
    chr->chr_write = fd_chr_write;
2268
    chr->chr_update_read_handler = fd_chr_update_read_handler;
2269
    chr->chr_close = fd_chr_close;
2270

    
2271
    qemu_chr_reset(chr);
2272

    
2273
    return chr;
2274
}
2275

    
2276
static CharDriverState *qemu_chr_open_file_out(const char *file_out)
2277
{
2278
    int fd_out;
2279

    
2280
    TFR(fd_out = open(file_out, O_WRONLY | O_TRUNC | O_CREAT | O_BINARY, 0666));
2281
    if (fd_out < 0)
2282
        return NULL;
2283
    return qemu_chr_open_fd(-1, fd_out);
2284
}
2285

    
2286
static CharDriverState *qemu_chr_open_pipe(const char *filename)
2287
{
2288
    int fd_in, fd_out;
2289
    char filename_in[256], filename_out[256];
2290

    
2291
    snprintf(filename_in, 256, "%s.in", filename);
2292
    snprintf(filename_out, 256, "%s.out", filename);
2293
    TFR(fd_in = open(filename_in, O_RDWR | O_BINARY));
2294
    TFR(fd_out = open(filename_out, O_RDWR | O_BINARY));
2295
    if (fd_in < 0 || fd_out < 0) {
2296
        if (fd_in >= 0)
2297
            close(fd_in);
2298
        if (fd_out >= 0)
2299
            close(fd_out);
2300
        TFR(fd_in = fd_out = open(filename, O_RDWR | O_BINARY));
2301
        if (fd_in < 0)
2302
            return NULL;
2303
    }
2304
    return qemu_chr_open_fd(fd_in, fd_out);
2305
}
2306

    
2307

    
2308
/* for STDIO, we handle the case where several clients use it
2309
   (nographic mode) */
2310

    
2311
#define TERM_FIFO_MAX_SIZE 1
2312

    
2313
static uint8_t term_fifo[TERM_FIFO_MAX_SIZE];
2314
static int term_fifo_size;
2315

    
2316
static int stdio_read_poll(void *opaque)
2317
{
2318
    CharDriverState *chr = opaque;
2319

    
2320
    /* try to flush the queue if needed */
2321
    if (term_fifo_size != 0 && qemu_chr_can_read(chr) > 0) {
2322
        qemu_chr_read(chr, term_fifo, 1);
2323
        term_fifo_size = 0;
2324
    }
2325
    /* see if we can absorb more chars */
2326
    if (term_fifo_size == 0)
2327
        return 1;
2328
    else
2329
        return 0;
2330
}
2331

    
2332
static void stdio_read(void *opaque)
2333
{
2334
    int size;
2335
    uint8_t buf[1];
2336
    CharDriverState *chr = opaque;
2337

    
2338
    size = read(0, buf, 1);
2339
    if (size == 0) {
2340
        /* stdin has been closed. Remove it from the active list.  */
2341
        qemu_set_fd_handler2(0, NULL, NULL, NULL, NULL);
2342
        return;
2343
    }
2344
    if (size > 0) {
2345
        if (qemu_chr_can_read(chr) > 0) {
2346
            qemu_chr_read(chr, buf, 1);
2347
        } else if (term_fifo_size == 0) {
2348
            term_fifo[term_fifo_size++] = buf[0];
2349
        }
2350
    }
2351
}
2352

    
2353
/* init terminal so that we can grab keys */
2354
static struct termios oldtty;
2355
static int old_fd0_flags;
2356
static int term_atexit_done;
2357

    
2358
static void term_exit(void)
2359
{
2360
    tcsetattr (0, TCSANOW, &oldtty);
2361
    fcntl(0, F_SETFL, old_fd0_flags);
2362
}
2363

    
2364
static void term_init(void)
2365
{
2366
    struct termios tty;
2367

    
2368
    tcgetattr (0, &tty);
2369
    oldtty = tty;
2370
    old_fd0_flags = fcntl(0, F_GETFL);
2371

    
2372
    tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
2373
                          |INLCR|IGNCR|ICRNL|IXON);
2374
    tty.c_oflag |= OPOST;
2375
    tty.c_lflag &= ~(ECHO|ECHONL|ICANON|IEXTEN);
2376
    /* if graphical mode, we allow Ctrl-C handling */
2377
    if (nographic)
2378
        tty.c_lflag &= ~ISIG;
2379
    tty.c_cflag &= ~(CSIZE|PARENB);
2380
    tty.c_cflag |= CS8;
2381
    tty.c_cc[VMIN] = 1;
2382
    tty.c_cc[VTIME] = 0;
2383

    
2384
    tcsetattr (0, TCSANOW, &tty);
2385

    
2386
    if (!term_atexit_done++)
2387
        atexit(term_exit);
2388

    
2389
    fcntl(0, F_SETFL, O_NONBLOCK);
2390
}
2391

    
2392
static void qemu_chr_close_stdio(struct CharDriverState *chr)
2393
{
2394
    term_exit();
2395
    stdio_nb_clients--;
2396
    qemu_set_fd_handler2(0, NULL, NULL, NULL, NULL);
2397
    fd_chr_close(chr);
2398
}
2399

    
2400
static CharDriverState *qemu_chr_open_stdio(void)
2401
{
2402
    CharDriverState *chr;
2403

    
2404
    if (stdio_nb_clients >= STDIO_MAX_CLIENTS)
2405
        return NULL;
2406
    chr = qemu_chr_open_fd(0, 1);
2407
    chr->chr_close = qemu_chr_close_stdio;
2408
    qemu_set_fd_handler2(0, stdio_read_poll, stdio_read, NULL, chr);
2409
    stdio_nb_clients++;
2410
    term_init();
2411

    
2412
    return chr;
2413
}
2414

    
2415
#ifdef __sun__
2416
/* Once Solaris has openpty(), this is going to be removed. */
2417
int openpty(int *amaster, int *aslave, char *name,
2418
            struct termios *termp, struct winsize *winp)
2419
{
2420
        const char *slave;
2421
        int mfd = -1, sfd = -1;
2422

    
2423
        *amaster = *aslave = -1;
2424

    
2425
        mfd = open("/dev/ptmx", O_RDWR | O_NOCTTY);
2426
        if (mfd < 0)
2427
                goto err;
2428

    
2429
        if (grantpt(mfd) == -1 || unlockpt(mfd) == -1)
2430
                goto err;
2431

    
2432
        if ((slave = ptsname(mfd)) == NULL)
2433
                goto err;
2434

    
2435
        if ((sfd = open(slave, O_RDONLY | O_NOCTTY)) == -1)
2436
                goto err;
2437

    
2438
        if (ioctl(sfd, I_PUSH, "ptem") == -1 ||
2439
            (termp != NULL && tcgetattr(sfd, termp) < 0))
2440
                goto err;
2441

    
2442
        if (amaster)
2443
                *amaster = mfd;
2444
        if (aslave)
2445
                *aslave = sfd;
2446
        if (winp)
2447
                ioctl(sfd, TIOCSWINSZ, winp);
2448

    
2449
        return 0;
2450

    
2451
err:
2452
        if (sfd != -1)
2453
                close(sfd);
2454
        close(mfd);
2455
        return -1;
2456
}
2457

    
2458
void cfmakeraw (struct termios *termios_p)
2459
{
2460
        termios_p->c_iflag &=
2461
                ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);
2462
        termios_p->c_oflag &= ~OPOST;
2463
        termios_p->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
2464
        termios_p->c_cflag &= ~(CSIZE|PARENB);
2465
        termios_p->c_cflag |= CS8;
2466

    
2467
        termios_p->c_cc[VMIN] = 0;
2468
        termios_p->c_cc[VTIME] = 0;
2469
}
2470
#endif
2471

    
2472
#if defined(__linux__) || defined(__sun__) || defined(__FreeBSD__) \
2473
    || defined(__NetBSD__) || defined(__OpenBSD__)
2474

    
2475
typedef struct {
2476
    int fd;
2477
    int connected;
2478
    int polling;
2479
    int read_bytes;
2480
    QEMUTimer *timer;
2481
} PtyCharDriver;
2482

    
2483
static void pty_chr_update_read_handler(CharDriverState *chr);
2484
static void pty_chr_state(CharDriverState *chr, int connected);
2485

    
2486
static int pty_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
2487
{
2488
    PtyCharDriver *s = chr->opaque;
2489

    
2490
    if (!s->connected) {
2491
        /* guest sends data, check for (re-)connect */
2492
        pty_chr_update_read_handler(chr);
2493
        return 0;
2494
    }
2495
    return unix_write(s->fd, buf, len);
2496
}
2497

    
2498
static int pty_chr_read_poll(void *opaque)
2499
{
2500
    CharDriverState *chr = opaque;
2501
    PtyCharDriver *s = chr->opaque;
2502

    
2503
    s->read_bytes = qemu_chr_can_read(chr);
2504
    return s->read_bytes;
2505
}
2506

    
2507
static void pty_chr_read(void *opaque)
2508
{
2509
    CharDriverState *chr = opaque;
2510
    PtyCharDriver *s = chr->opaque;
2511
    int size, len;
2512
    uint8_t buf[1024];
2513

    
2514
    len = sizeof(buf);
2515
    if (len > s->read_bytes)
2516
        len = s->read_bytes;
2517
    if (len == 0)
2518
        return;
2519
    size = read(s->fd, buf, len);
2520
    if ((size == -1 && errno == EIO) ||
2521
        (size == 0)) {
2522
        pty_chr_state(chr, 0);
2523
        return;
2524
    }
2525
    if (size > 0) {
2526
        pty_chr_state(chr, 1);
2527
        qemu_chr_read(chr, buf, size);
2528
    }
2529
}
2530

    
2531
static void pty_chr_update_read_handler(CharDriverState *chr)
2532
{
2533
    PtyCharDriver *s = chr->opaque;
2534

    
2535
    qemu_set_fd_handler2(s->fd, pty_chr_read_poll,
2536
                         pty_chr_read, NULL, chr);
2537
    s->polling = 1;
2538
    /*
2539
     * Short timeout here: just need wait long enougth that qemu makes
2540
     * it through the poll loop once.  When reconnected we want a
2541
     * short timeout so we notice it almost instantly.  Otherwise
2542
     * read() gives us -EIO instantly, making pty_chr_state() reset the
2543
     * timeout to the normal (much longer) poll interval before the
2544
     * timer triggers.
2545
     */
2546
    qemu_mod_timer(s->timer, qemu_get_clock(rt_clock) + 10);
2547
}
2548

    
2549
static void pty_chr_state(CharDriverState *chr, int connected)
2550
{
2551
    PtyCharDriver *s = chr->opaque;
2552

    
2553
    if (!connected) {
2554
        qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
2555
        s->connected = 0;
2556
        s->polling = 0;
2557
        /* (re-)connect poll interval for idle guests: once per second.
2558
         * We check more frequently in case the guests sends data to
2559
         * the virtual device linked to our pty. */
2560
        qemu_mod_timer(s->timer, qemu_get_clock(rt_clock) + 1000);
2561
    } else {
2562
        if (!s->connected)
2563
            qemu_chr_reset(chr);
2564
        s->connected = 1;
2565
    }
2566
}
2567

    
2568
static void pty_chr_timer(void *opaque)
2569
{
2570
    struct CharDriverState *chr = opaque;
2571
    PtyCharDriver *s = chr->opaque;
2572

    
2573
    if (s->connected)
2574
        return;
2575
    if (s->polling) {
2576
        /* If we arrive here without polling being cleared due
2577
         * read returning -EIO, then we are (re-)connected */
2578
        pty_chr_state(chr, 1);
2579
        return;
2580
    }
2581

    
2582
    /* Next poll ... */
2583
    pty_chr_update_read_handler(chr);
2584
}
2585

    
2586
static void pty_chr_close(struct CharDriverState *chr)
2587
{
2588
    PtyCharDriver *s = chr->opaque;
2589

    
2590
    qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
2591
    close(s->fd);
2592
    qemu_free(s);
2593
}
2594

    
2595
static CharDriverState *qemu_chr_open_pty(void)
2596
{
2597
    CharDriverState *chr;
2598
    PtyCharDriver *s;
2599
    struct termios tty;
2600
    int slave_fd;
2601
#if defined(__OpenBSD__)
2602
    char pty_name[PATH_MAX];
2603
#define q_ptsname(x) pty_name
2604
#else
2605
    char *pty_name = NULL;
2606
#define q_ptsname(x) ptsname(x)
2607
#endif
2608

    
2609
    chr = qemu_mallocz(sizeof(CharDriverState));
2610
    if (!chr)
2611
        return NULL;
2612
    s = qemu_mallocz(sizeof(PtyCharDriver));
2613
    if (!s) {
2614
        qemu_free(chr);
2615
        return NULL;
2616
    }
2617

    
2618
    if (openpty(&s->fd, &slave_fd, pty_name, NULL, NULL) < 0) {
2619
        return NULL;
2620
    }
2621

    
2622
    /* Set raw attributes on the pty. */
2623
    cfmakeraw(&tty);
2624
    tcsetattr(slave_fd, TCSAFLUSH, &tty);
2625
    close(slave_fd);
2626

    
2627
    fprintf(stderr, "char device redirected to %s\n", q_ptsname(s->fd));
2628

    
2629
    chr->opaque = s;
2630
    chr->chr_write = pty_chr_write;
2631
    chr->chr_update_read_handler = pty_chr_update_read_handler;
2632
    chr->chr_close = pty_chr_close;
2633

    
2634
    s->timer = qemu_new_timer(rt_clock, pty_chr_timer, chr);
2635

    
2636
    return chr;
2637
}
2638

    
2639
static void tty_serial_init(int fd, int speed,
2640
                            int parity, int data_bits, int stop_bits)
2641
{
2642
    struct termios tty;
2643
    speed_t spd;
2644

    
2645
#if 0
2646
    printf("tty_serial_init: speed=%d parity=%c data=%d stop=%d\n",
2647
           speed, parity, data_bits, stop_bits);
2648
#endif
2649
    tcgetattr (fd, &tty);
2650

    
2651
#define MARGIN 1.1
2652
    if (speed <= 50 * MARGIN)
2653
        spd = B50;
2654
    else if (speed <= 75 * MARGIN)
2655
        spd = B75;
2656
    else if (speed <= 300 * MARGIN)
2657
        spd = B300;
2658
    else if (speed <= 600 * MARGIN)
2659
        spd = B600;
2660
    else if (speed <= 1200 * MARGIN)
2661
        spd = B1200;
2662
    else if (speed <= 2400 * MARGIN)
2663
        spd = B2400;
2664
    else if (speed <= 4800 * MARGIN)
2665
        spd = B4800;
2666
    else if (speed <= 9600 * MARGIN)
2667
        spd = B9600;
2668
    else if (speed <= 19200 * MARGIN)
2669
        spd = B19200;
2670
    else if (speed <= 38400 * MARGIN)
2671
        spd = B38400;
2672
    else if (speed <= 57600 * MARGIN)
2673
        spd = B57600;
2674
    else if (speed <= 115200 * MARGIN)
2675
        spd = B115200;
2676
    else
2677
        spd = B115200;
2678

    
2679
    cfsetispeed(&tty, spd);
2680
    cfsetospeed(&tty, spd);
2681

    
2682
    tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
2683
                          |INLCR|IGNCR|ICRNL|IXON);
2684
    tty.c_oflag |= OPOST;
2685
    tty.c_lflag &= ~(ECHO|ECHONL|ICANON|IEXTEN|ISIG);
2686
    tty.c_cflag &= ~(CSIZE|PARENB|PARODD|CRTSCTS|CSTOPB);
2687
    switch(data_bits) {
2688
    default:
2689
    case 8:
2690
        tty.c_cflag |= CS8;
2691
        break;
2692
    case 7:
2693
        tty.c_cflag |= CS7;
2694
        break;
2695
    case 6:
2696
        tty.c_cflag |= CS6;
2697
        break;
2698
    case 5:
2699
        tty.c_cflag |= CS5;
2700
        break;
2701
    }
2702
    switch(parity) {
2703
    default:
2704
    case 'N':
2705
        break;
2706
    case 'E':
2707
        tty.c_cflag |= PARENB;
2708
        break;
2709
    case 'O':
2710
        tty.c_cflag |= PARENB | PARODD;
2711
        break;
2712
    }
2713
    if (stop_bits == 2)
2714
        tty.c_cflag |= CSTOPB;
2715

    
2716
    tcsetattr (fd, TCSANOW, &tty);
2717
}
2718

    
2719
static int tty_serial_ioctl(CharDriverState *chr, int cmd, void *arg)
2720
{
2721
    FDCharDriver *s = chr->opaque;
2722

    
2723
    switch(cmd) {
2724
    case CHR_IOCTL_SERIAL_SET_PARAMS:
2725
        {
2726
            QEMUSerialSetParams *ssp = arg;
2727
            tty_serial_init(s->fd_in, ssp->speed, ssp->parity,
2728
                            ssp->data_bits, ssp->stop_bits);
2729
        }
2730
        break;
2731
    case CHR_IOCTL_SERIAL_SET_BREAK:
2732
        {
2733
            int enable = *(int *)arg;
2734
            if (enable)
2735
                tcsendbreak(s->fd_in, 1);
2736
        }
2737
        break;
2738
    case CHR_IOCTL_SERIAL_GET_TIOCM:
2739
        {
2740
            int sarg = 0;
2741
            int *targ = (int *)arg;
2742
            ioctl(s->fd_in, TIOCMGET, &sarg);
2743
            *targ = 0;
2744
            if (sarg | TIOCM_CTS)
2745
                *targ |= CHR_TIOCM_CTS;
2746
            if (sarg | TIOCM_CAR)
2747
                *targ |= CHR_TIOCM_CAR;
2748
            if (sarg | TIOCM_DSR)
2749
                *targ |= CHR_TIOCM_DSR;
2750
            if (sarg | TIOCM_RI)
2751
                *targ |= CHR_TIOCM_RI;
2752
            if (sarg | TIOCM_DTR)
2753
                *targ |= CHR_TIOCM_DTR;
2754
            if (sarg | TIOCM_RTS)
2755
                *targ |= CHR_TIOCM_RTS;
2756
        }
2757
        break;
2758
    case CHR_IOCTL_SERIAL_SET_TIOCM:
2759
        {
2760
            int sarg = *(int *)arg;
2761
            int targ = 0;
2762
            if (sarg | CHR_TIOCM_DTR)
2763
                targ |= TIOCM_DTR;
2764
            if (sarg | CHR_TIOCM_RTS)
2765
                targ |= TIOCM_RTS;
2766
            ioctl(s->fd_in, TIOCMSET, &targ);
2767
        }
2768
        break;
2769
    default:
2770
        return -ENOTSUP;
2771
    }
2772
    return 0;
2773
}
2774

    
2775
static CharDriverState *qemu_chr_open_tty(const char *filename)
2776
{
2777
    CharDriverState *chr;
2778
    int fd;
2779

    
2780
    TFR(fd = open(filename, O_RDWR | O_NONBLOCK));
2781
    tty_serial_init(fd, 115200, 'N', 8, 1);
2782
    chr = qemu_chr_open_fd(fd, fd);
2783
    if (!chr) {
2784
        close(fd);
2785
        return NULL;
2786
    }
2787
    chr->chr_ioctl = tty_serial_ioctl;
2788
    qemu_chr_reset(chr);
2789
    return chr;
2790
}
2791
#else  /* ! __linux__ && ! __sun__ */
2792
static CharDriverState *qemu_chr_open_pty(void)
2793
{
2794
    return NULL;
2795
}
2796
#endif /* __linux__ || __sun__ */
2797

    
2798
#if defined(__linux__)
2799
typedef struct {
2800
    int fd;
2801
    int mode;
2802
} ParallelCharDriver;
2803

    
2804
static int pp_hw_mode(ParallelCharDriver *s, uint16_t mode)
2805
{
2806
    if (s->mode != mode) {
2807
        int m = mode;
2808
        if (ioctl(s->fd, PPSETMODE, &m) < 0)
2809
            return 0;
2810
        s->mode = mode;
2811
    }
2812
    return 1;
2813
}
2814

    
2815
static int pp_ioctl(CharDriverState *chr, int cmd, void *arg)
2816
{
2817
    ParallelCharDriver *drv = chr->opaque;
2818
    int fd = drv->fd;
2819
    uint8_t b;
2820

    
2821
    switch(cmd) {
2822
    case CHR_IOCTL_PP_READ_DATA:
2823
        if (ioctl(fd, PPRDATA, &b) < 0)
2824
            return -ENOTSUP;
2825
        *(uint8_t *)arg = b;
2826
        break;
2827
    case CHR_IOCTL_PP_WRITE_DATA:
2828
        b = *(uint8_t *)arg;
2829
        if (ioctl(fd, PPWDATA, &b) < 0)
2830
            return -ENOTSUP;
2831
        break;
2832
    case CHR_IOCTL_PP_READ_CONTROL:
2833
        if (ioctl(fd, PPRCONTROL, &b) < 0)
2834
            return -ENOTSUP;
2835
        /* Linux gives only the lowest bits, and no way to know data
2836
           direction! For better compatibility set the fixed upper
2837
           bits. */
2838
        *(uint8_t *)arg = b | 0xc0;
2839
        break;
2840
    case CHR_IOCTL_PP_WRITE_CONTROL:
2841
        b = *(uint8_t *)arg;
2842
        if (ioctl(fd, PPWCONTROL, &b) < 0)
2843
            return -ENOTSUP;
2844
        break;
2845
    case CHR_IOCTL_PP_READ_STATUS:
2846
        if (ioctl(fd, PPRSTATUS, &b) < 0)
2847
            return -ENOTSUP;
2848
        *(uint8_t *)arg = b;
2849
        break;
2850
    case CHR_IOCTL_PP_DATA_DIR:
2851
        if (ioctl(fd, PPDATADIR, (int *)arg) < 0)
2852
            return -ENOTSUP;
2853
        break;
2854
    case CHR_IOCTL_PP_EPP_READ_ADDR:
2855
        if (pp_hw_mode(drv, IEEE1284_MODE_EPP|IEEE1284_ADDR)) {
2856
            struct ParallelIOArg *parg = arg;
2857
            int n = read(fd, parg->buffer, parg->count);
2858
            if (n != parg->count) {
2859
                return -EIO;
2860
            }
2861
        }
2862
        break;
2863
    case CHR_IOCTL_PP_EPP_READ:
2864
        if (pp_hw_mode(drv, IEEE1284_MODE_EPP)) {
2865
            struct ParallelIOArg *parg = arg;
2866
            int n = read(fd, parg->buffer, parg->count);
2867
            if (n != parg->count) {
2868
                return -EIO;
2869
            }
2870
        }
2871
        break;
2872
    case CHR_IOCTL_PP_EPP_WRITE_ADDR:
2873
        if (pp_hw_mode(drv, IEEE1284_MODE_EPP|IEEE1284_ADDR)) {
2874
            struct ParallelIOArg *parg = arg;
2875
            int n = write(fd, parg->buffer, parg->count);
2876
            if (n != parg->count) {
2877
                return -EIO;
2878
            }
2879
        }
2880
        break;
2881
    case CHR_IOCTL_PP_EPP_WRITE:
2882
        if (pp_hw_mode(drv, IEEE1284_MODE_EPP)) {
2883
            struct ParallelIOArg *parg = arg;
2884
            int n = write(fd, parg->buffer, parg->count);
2885
            if (n != parg->count) {
2886
                return -EIO;
2887
            }
2888
        }
2889
        break;
2890
    default:
2891
        return -ENOTSUP;
2892
    }
2893
    return 0;
2894
}
2895

    
2896
static void pp_close(CharDriverState *chr)
2897
{
2898
    ParallelCharDriver *drv = chr->opaque;
2899
    int fd = drv->fd;
2900

    
2901
    pp_hw_mode(drv, IEEE1284_MODE_COMPAT);
2902
    ioctl(fd, PPRELEASE);
2903
    close(fd);
2904
    qemu_free(drv);
2905
}
2906

    
2907
static CharDriverState *qemu_chr_open_pp(const char *filename)
2908
{
2909
    CharDriverState *chr;
2910
    ParallelCharDriver *drv;
2911
    int fd;
2912

    
2913
    TFR(fd = open(filename, O_RDWR));
2914
    if (fd < 0)
2915
        return NULL;
2916

    
2917
    if (ioctl(fd, PPCLAIM) < 0) {
2918
        close(fd);
2919
        return NULL;
2920
    }
2921

    
2922
    drv = qemu_mallocz(sizeof(ParallelCharDriver));
2923
    if (!drv) {
2924
        close(fd);
2925
        return NULL;
2926
    }
2927
    drv->fd = fd;
2928
    drv->mode = IEEE1284_MODE_COMPAT;
2929

    
2930
    chr = qemu_mallocz(sizeof(CharDriverState));
2931
    if (!chr) {
2932
        qemu_free(drv);
2933
        close(fd);
2934
        return NULL;
2935
    }
2936
    chr->chr_write = null_chr_write;
2937
    chr->chr_ioctl = pp_ioctl;
2938
    chr->chr_close = pp_close;
2939
    chr->opaque = drv;
2940

    
2941
    qemu_chr_reset(chr);
2942

    
2943
    return chr;
2944
}
2945
#endif /* __linux__ */
2946

    
2947
#else /* _WIN32 */
2948

    
2949
typedef struct {
2950
    int max_size;
2951
    HANDLE hcom, hrecv, hsend;
2952
    OVERLAPPED orecv, osend;
2953
    BOOL fpipe;
2954
    DWORD len;
2955
} WinCharState;
2956

    
2957
#define NSENDBUF 2048
2958
#define NRECVBUF 2048
2959
#define MAXCONNECT 1
2960
#define NTIMEOUT 5000
2961

    
2962
static int win_chr_poll(void *opaque);
2963
static int win_chr_pipe_poll(void *opaque);
2964

    
2965
static void win_chr_close(CharDriverState *chr)
2966
{
2967
    WinCharState *s = chr->opaque;
2968

    
2969
    if (s->hsend) {
2970
        CloseHandle(s->hsend);
2971
        s->hsend = NULL;
2972
    }
2973
    if (s->hrecv) {
2974
        CloseHandle(s->hrecv);
2975
        s->hrecv = NULL;
2976
    }
2977
    if (s->hcom) {
2978
        CloseHandle(s->hcom);
2979
        s->hcom = NULL;
2980
    }
2981
    if (s->fpipe)
2982
        qemu_del_polling_cb(win_chr_pipe_poll, chr);
2983
    else
2984
        qemu_del_polling_cb(win_chr_poll, chr);
2985
}
2986

    
2987
static int win_chr_init(CharDriverState *chr, const char *filename)
2988
{
2989
    WinCharState *s = chr->opaque;
2990
    COMMCONFIG comcfg;
2991
    COMMTIMEOUTS cto = { 0, 0, 0, 0, 0};
2992
    COMSTAT comstat;
2993
    DWORD size;
2994
    DWORD err;
2995

    
2996
    s->hsend = CreateEvent(NULL, TRUE, FALSE, NULL);
2997
    if (!s->hsend) {
2998
        fprintf(stderr, "Failed CreateEvent\n");
2999
        goto fail;
3000
    }
3001
    s->hrecv = CreateEvent(NULL, TRUE, FALSE, NULL);
3002
    if (!s->hrecv) {
3003
        fprintf(stderr, "Failed CreateEvent\n");
3004
        goto fail;
3005
    }
3006

    
3007
    s->hcom = CreateFile(filename, GENERIC_READ|GENERIC_WRITE, 0, NULL,
3008
                      OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
3009
    if (s->hcom == INVALID_HANDLE_VALUE) {
3010
        fprintf(stderr, "Failed CreateFile (%lu)\n", GetLastError());
3011
        s->hcom = NULL;
3012
        goto fail;
3013
    }
3014

    
3015
    if (!SetupComm(s->hcom, NRECVBUF, NSENDBUF)) {
3016
        fprintf(stderr, "Failed SetupComm\n");
3017
        goto fail;
3018
    }
3019

    
3020
    ZeroMemory(&comcfg, sizeof(COMMCONFIG));
3021
    size = sizeof(COMMCONFIG);
3022
    GetDefaultCommConfig(filename, &comcfg, &size);
3023
    comcfg.dcb.DCBlength = sizeof(DCB);
3024
    CommConfigDialog(filename, NULL, &comcfg);
3025

    
3026
    if (!SetCommState(s->hcom, &comcfg.dcb)) {
3027
        fprintf(stderr, "Failed SetCommState\n");
3028
        goto fail;
3029
    }
3030

    
3031
    if (!SetCommMask(s->hcom, EV_ERR)) {
3032
        fprintf(stderr, "Failed SetCommMask\n");
3033
        goto fail;
3034
    }
3035

    
3036
    cto.ReadIntervalTimeout = MAXDWORD;
3037
    if (!SetCommTimeouts(s->hcom, &cto)) {
3038
        fprintf(stderr, "Failed SetCommTimeouts\n");
3039
        goto fail;
3040
    }
3041

    
3042
    if (!ClearCommError(s->hcom, &err, &comstat)) {
3043
        fprintf(stderr, "Failed ClearCommError\n");
3044
        goto fail;
3045
    }
3046
    qemu_add_polling_cb(win_chr_poll, chr);
3047
    return 0;
3048

    
3049
 fail:
3050
    win_chr_close(chr);
3051
    return -1;
3052
}
3053

    
3054
static int win_chr_write(CharDriverState *chr, const uint8_t *buf, int len1)
3055
{
3056
    WinCharState *s = chr->opaque;
3057
    DWORD len, ret, size, err;
3058

    
3059
    len = len1;
3060
    ZeroMemory(&s->osend, sizeof(s->osend));
3061
    s->osend.hEvent = s->hsend;
3062
    while (len > 0) {
3063
        if (s->hsend)
3064
            ret = WriteFile(s->hcom, buf, len, &size, &s->osend);
3065
        else
3066
            ret = WriteFile(s->hcom, buf, len, &size, NULL);
3067
        if (!ret) {
3068
            err = GetLastError();
3069
            if (err == ERROR_IO_PENDING) {
3070
                ret = GetOverlappedResult(s->hcom, &s->osend, &size, TRUE);
3071
                if (ret) {
3072
                    buf += size;
3073
                    len -= size;
3074
                } else {
3075
                    break;
3076
                }
3077
            } else {
3078
                break;
3079
            }
3080
        } else {
3081
            buf += size;
3082
            len -= size;
3083
        }
3084
    }
3085
    return len1 - len;
3086
}
3087

    
3088
static int win_chr_read_poll(CharDriverState *chr)
3089
{
3090
    WinCharState *s = chr->opaque;
3091

    
3092
    s->max_size = qemu_chr_can_read(chr);
3093
    return s->max_size;
3094
}
3095

    
3096
static void win_chr_readfile(CharDriverState *chr)
3097
{
3098
    WinCharState *s = chr->opaque;
3099
    int ret, err;
3100
    uint8_t buf[1024];
3101
    DWORD size;
3102

    
3103
    ZeroMemory(&s->orecv, sizeof(s->orecv));
3104
    s->orecv.hEvent = s->hrecv;
3105
    ret = ReadFile(s->hcom, buf, s->len, &size, &s->orecv);
3106
    if (!ret) {
3107
        err = GetLastError();
3108
        if (err == ERROR_IO_PENDING) {
3109
            ret = GetOverlappedResult(s->hcom, &s->orecv, &size, TRUE);
3110
        }
3111
    }
3112

    
3113
    if (size > 0) {
3114
        qemu_chr_read(chr, buf, size);
3115
    }
3116
}
3117

    
3118
static void win_chr_read(CharDriverState *chr)
3119
{
3120
    WinCharState *s = chr->opaque;
3121

    
3122
    if (s->len > s->max_size)
3123
        s->len = s->max_size;
3124
    if (s->len == 0)
3125
        return;
3126

    
3127
    win_chr_readfile(chr);
3128
}
3129

    
3130
static int win_chr_poll(void *opaque)
3131
{
3132
    CharDriverState *chr = opaque;
3133
    WinCharState *s = chr->opaque;
3134
    COMSTAT status;
3135
    DWORD comerr;
3136

    
3137
    ClearCommError(s->hcom, &comerr, &status);
3138
    if (status.cbInQue > 0) {
3139
        s->len = status.cbInQue;
3140
        win_chr_read_poll(chr);
3141
        win_chr_read(chr);
3142
        return 1;
3143
    }
3144
    return 0;
3145
}
3146

    
3147
static CharDriverState *qemu_chr_open_win(const char *filename)
3148
{
3149
    CharDriverState *chr;
3150
    WinCharState *s;
3151

    
3152
    chr = qemu_mallocz(sizeof(CharDriverState));
3153
    if (!chr)
3154
        return NULL;
3155
    s = qemu_mallocz(sizeof(WinCharState));
3156
    if (!s) {
3157
        free(chr);
3158
        return NULL;
3159
    }
3160
    chr->opaque = s;
3161
    chr->chr_write = win_chr_write;
3162
    chr->chr_close = win_chr_close;
3163

    
3164
    if (win_chr_init(chr, filename) < 0) {
3165
        free(s);
3166
        free(chr);
3167
        return NULL;
3168
    }
3169
    qemu_chr_reset(chr);
3170
    return chr;
3171
}
3172

    
3173
static int win_chr_pipe_poll(void *opaque)
3174
{
3175
    CharDriverState *chr = opaque;
3176
    WinCharState *s = chr->opaque;
3177
    DWORD size;
3178

    
3179
    PeekNamedPipe(s->hcom, NULL, 0, NULL, &size, NULL);
3180
    if (size > 0) {
3181
        s->len = size;
3182
        win_chr_read_poll(chr);
3183
        win_chr_read(chr);
3184
        return 1;
3185
    }
3186
    return 0;
3187
}
3188

    
3189
static int win_chr_pipe_init(CharDriverState *chr, const char *filename)
3190
{
3191
    WinCharState *s = chr->opaque;
3192
    OVERLAPPED ov;
3193
    int ret;
3194
    DWORD size;
3195
    char openname[256];
3196

    
3197
    s->fpipe = TRUE;
3198

    
3199
    s->hsend = CreateEvent(NULL, TRUE, FALSE, NULL);
3200
    if (!s->hsend) {
3201
        fprintf(stderr, "Failed CreateEvent\n");
3202
        goto fail;
3203
    }
3204
    s->hrecv = CreateEvent(NULL, TRUE, FALSE, NULL);
3205
    if (!s->hrecv) {
3206
        fprintf(stderr, "Failed CreateEvent\n");
3207
        goto fail;
3208
    }
3209

    
3210
    snprintf(openname, sizeof(openname), "\\\\.\\pipe\\%s", filename);
3211
    s->hcom = CreateNamedPipe(openname, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
3212
                              PIPE_TYPE_BYTE | PIPE_READMODE_BYTE |
3213
                              PIPE_WAIT,
3214
                              MAXCONNECT, NSENDBUF, NRECVBUF, NTIMEOUT, NULL);
3215
    if (s->hcom == INVALID_HANDLE_VALUE) {
3216
        fprintf(stderr, "Failed CreateNamedPipe (%lu)\n", GetLastError());
3217
        s->hcom = NULL;
3218
        goto fail;
3219
    }
3220

    
3221
    ZeroMemory(&ov, sizeof(ov));
3222
    ov.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
3223
    ret = ConnectNamedPipe(s->hcom, &ov);
3224
    if (ret) {
3225
        fprintf(stderr, "Failed ConnectNamedPipe\n");
3226
        goto fail;
3227
    }
3228

    
3229
    ret = GetOverlappedResult(s->hcom, &ov, &size, TRUE);
3230
    if (!ret) {
3231
        fprintf(stderr, "Failed GetOverlappedResult\n");
3232
        if (ov.hEvent) {
3233
            CloseHandle(ov.hEvent);
3234
            ov.hEvent = NULL;
3235
        }
3236
        goto fail;
3237
    }
3238

    
3239
    if (ov.hEvent) {
3240
        CloseHandle(ov.hEvent);
3241
        ov.hEvent = NULL;
3242
    }
3243
    qemu_add_polling_cb(win_chr_pipe_poll, chr);
3244
    return 0;
3245

    
3246
 fail:
3247
    win_chr_close(chr);
3248
    return -1;
3249
}
3250

    
3251

    
3252
static CharDriverState *qemu_chr_open_win_pipe(const char *filename)
3253
{
3254
    CharDriverState *chr;
3255
    WinCharState *s;
3256

    
3257
    chr = qemu_mallocz(sizeof(CharDriverState));
3258
    if (!chr)
3259
        return NULL;
3260
    s = qemu_mallocz(sizeof(WinCharState));
3261
    if (!s) {
3262
        free(chr);
3263
        return NULL;
3264
    }
3265
    chr->opaque = s;
3266
    chr->chr_write = win_chr_write;
3267
    chr->chr_close = win_chr_close;
3268

    
3269
    if (win_chr_pipe_init(chr, filename) < 0) {
3270
        free(s);
3271
        free(chr);
3272
        return NULL;
3273
    }
3274
    qemu_chr_reset(chr);
3275
    return chr;
3276
}
3277

    
3278
static CharDriverState *qemu_chr_open_win_file(HANDLE fd_out)
3279
{
3280
    CharDriverState *chr;
3281
    WinCharState *s;
3282

    
3283
    chr = qemu_mallocz(sizeof(CharDriverState));
3284
    if (!chr)
3285
        return NULL;
3286
    s = qemu_mallocz(sizeof(WinCharState));
3287
    if (!s) {
3288
        free(chr);
3289
        return NULL;
3290
    }
3291
    s->hcom = fd_out;
3292
    chr->opaque = s;
3293
    chr->chr_write = win_chr_write;
3294
    qemu_chr_reset(chr);
3295
    return chr;
3296
}
3297

    
3298
static CharDriverState *qemu_chr_open_win_con(const char *filename)
3299
{
3300
    return qemu_chr_open_win_file(GetStdHandle(STD_OUTPUT_HANDLE));
3301
}
3302

    
3303
static CharDriverState *qemu_chr_open_win_file_out(const char *file_out)
3304
{
3305
    HANDLE fd_out;
3306

    
3307
    fd_out = CreateFile(file_out, GENERIC_WRITE, FILE_SHARE_READ, NULL,
3308
                        OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
3309
    if (fd_out == INVALID_HANDLE_VALUE)
3310
        return NULL;
3311

    
3312
    return qemu_chr_open_win_file(fd_out);
3313
}
3314
#endif /* !_WIN32 */
3315

    
3316
/***********************************************************/
3317
/* UDP Net console */
3318

    
3319
typedef struct {
3320
    int fd;
3321
    struct sockaddr_in daddr;
3322
    uint8_t buf[1024];
3323
    int bufcnt;
3324
    int bufptr;
3325
    int max_size;
3326
} NetCharDriver;
3327

    
3328
static int udp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
3329
{
3330
    NetCharDriver *s = chr->opaque;
3331

    
3332
    return sendto(s->fd, buf, len, 0,
3333
                  (struct sockaddr *)&s->daddr, sizeof(struct sockaddr_in));
3334
}
3335

    
3336
static int udp_chr_read_poll(void *opaque)
3337
{
3338
    CharDriverState *chr = opaque;
3339
    NetCharDriver *s = chr->opaque;
3340

    
3341
    s->max_size = qemu_chr_can_read(chr);
3342

    
3343
    /* If there were any stray characters in the queue process them
3344
     * first
3345
     */
3346
    while (s->max_size > 0 && s->bufptr < s->bufcnt) {
3347
        qemu_chr_read(chr, &s->buf[s->bufptr], 1);
3348
        s->bufptr++;
3349
        s->max_size = qemu_chr_can_read(chr);
3350
    }
3351
    return s->max_size;
3352
}
3353

    
3354
static void udp_chr_read(void *opaque)
3355
{
3356
    CharDriverState *chr = opaque;
3357
    NetCharDriver *s = chr->opaque;
3358

    
3359
    if (s->max_size == 0)
3360
        return;
3361
    s->bufcnt = recv(s->fd, s->buf, sizeof(s->buf), 0);
3362
    s->bufptr = s->bufcnt;
3363
    if (s->bufcnt <= 0)
3364
        return;
3365

    
3366
    s->bufptr = 0;
3367
    while (s->max_size > 0 && s->bufptr < s->bufcnt) {
3368
        qemu_chr_read(chr, &s->buf[s->bufptr], 1);
3369
        s->bufptr++;
3370
        s->max_size = qemu_chr_can_read(chr);
3371
    }
3372
}
3373

    
3374
static void udp_chr_update_read_handler(CharDriverState *chr)
3375
{
3376
    NetCharDriver *s = chr->opaque;
3377

    
3378
    if (s->fd >= 0) {
3379
        qemu_set_fd_handler2(s->fd, udp_chr_read_poll,
3380
                             udp_chr_read, NULL, chr);
3381
    }
3382
}
3383

    
3384
int parse_host_port(struct sockaddr_in *saddr, const char *str);
3385
#ifndef _WIN32
3386
static int parse_unix_path(struct sockaddr_un *uaddr, const char *str);
3387
#endif
3388
int parse_host_src_port(struct sockaddr_in *haddr,
3389
                        struct sockaddr_in *saddr,
3390
                        const char *str);
3391

    
3392
static CharDriverState *qemu_chr_open_udp(const char *def)
3393
{
3394
    CharDriverState *chr = NULL;
3395
    NetCharDriver *s = NULL;
3396
    int fd = -1;
3397
    struct sockaddr_in saddr;
3398

    
3399
    chr = qemu_mallocz(sizeof(CharDriverState));
3400
    if (!chr)
3401
        goto return_err;
3402
    s = qemu_mallocz(sizeof(NetCharDriver));
3403
    if (!s)
3404
        goto return_err;
3405

    
3406
    fd = socket(PF_INET, SOCK_DGRAM, 0);
3407
    if (fd < 0) {
3408
        perror("socket(PF_INET, SOCK_DGRAM)");
3409
        goto return_err;
3410
    }
3411

    
3412
    if (parse_host_src_port(&s->daddr, &saddr, def) < 0) {
3413
        printf("Could not parse: %s\n", def);
3414
        goto return_err;
3415
    }
3416

    
3417
    if (bind(fd, (struct sockaddr *)&saddr, sizeof(saddr)) < 0)
3418
    {
3419
        perror("bind");
3420
        goto return_err;
3421
    }
3422

    
3423
    s->fd = fd;
3424
    s->bufcnt = 0;
3425
    s->bufptr = 0;
3426
    chr->opaque = s;
3427
    chr->chr_write = udp_chr_write;
3428
    chr->chr_update_read_handler = udp_chr_update_read_handler;
3429
    return chr;
3430

    
3431
return_err:
3432
    if (chr)
3433
        free(chr);
3434
    if (s)
3435
        free(s);
3436
    if (fd >= 0)
3437
        closesocket(fd);
3438
    return NULL;
3439
}
3440

    
3441
/***********************************************************/
3442
/* TCP Net console */
3443

    
3444
typedef struct {
3445
    int fd, listen_fd;
3446
    int connected;
3447
    int max_size;
3448
    int do_telnetopt;
3449
    int do_nodelay;
3450
    int is_unix;
3451
} TCPCharDriver;
3452

    
3453
static void tcp_chr_accept(void *opaque);
3454

    
3455
static int tcp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
3456
{
3457
    TCPCharDriver *s = chr->opaque;
3458
    if (s->connected) {
3459
        return send_all(s->fd, buf, len);
3460
    } else {
3461
        /* XXX: indicate an error ? */
3462
        return len;
3463
    }
3464
}
3465

    
3466
static int tcp_chr_read_poll(void *opaque)
3467
{
3468
    CharDriverState *chr = opaque;
3469
    TCPCharDriver *s = chr->opaque;
3470
    if (!s->connected)
3471
        return 0;
3472
    s->max_size = qemu_chr_can_read(chr);
3473
    return s->max_size;
3474
}
3475

    
3476
#define IAC 255
3477
#define IAC_BREAK 243
3478
static void tcp_chr_process_IAC_bytes(CharDriverState *chr,
3479
                                      TCPCharDriver *s,
3480
                                      uint8_t *buf, int *size)
3481
{
3482
    /* Handle any telnet client's basic IAC options to satisfy char by
3483
     * char mode with no echo.  All IAC options will be removed from
3484
     * the buf and the do_telnetopt variable will be used to track the
3485
     * state of the width of the IAC information.
3486
     *
3487
     * IAC commands come in sets of 3 bytes with the exception of the
3488
     * "IAC BREAK" command and the double IAC.
3489
     */
3490

    
3491
    int i;
3492
    int j = 0;
3493

    
3494
    for (i = 0; i < *size; i++) {
3495
        if (s->do_telnetopt > 1) {
3496
            if ((unsigned char)buf[i] == IAC && s->do_telnetopt == 2) {
3497
                /* Double IAC means send an IAC */
3498
                if (j != i)
3499
                    buf[j] = buf[i];
3500
                j++;
3501
                s->do_telnetopt = 1;
3502
            } else {
3503
                if ((unsigned char)buf[i] == IAC_BREAK && s->do_telnetopt == 2) {
3504
                    /* Handle IAC break commands by sending a serial break */
3505
                    qemu_chr_event(chr, CHR_EVENT_BREAK);
3506
                    s->do_telnetopt++;
3507
                }
3508
                s->do_telnetopt++;
3509
            }
3510
            if (s->do_telnetopt >= 4) {
3511
                s->do_telnetopt = 1;
3512
            }
3513
        } else {
3514
            if ((unsigned char)buf[i] == IAC) {
3515
                s->do_telnetopt = 2;
3516
            } else {
3517
                if (j != i)
3518
                    buf[j] = buf[i];
3519
                j++;
3520
            }
3521
        }
3522
    }
3523
    *size = j;
3524
}
3525

    
3526
static void tcp_chr_read(void *opaque)
3527
{
3528
    CharDriverState *chr = opaque;
3529
    TCPCharDriver *s = chr->opaque;
3530
    uint8_t buf[1024];
3531
    int len, size;
3532

    
3533
    if (!s->connected || s->max_size <= 0)
3534
        return;
3535
    len = sizeof(buf);
3536
    if (len > s->max_size)
3537
        len = s->max_size;
3538
    size = recv(s->fd, buf, len, 0);
3539
    if (size == 0) {
3540
        /* connection closed */
3541
        s->connected = 0;
3542
        if (s->listen_fd >= 0) {
3543
            qemu_set_fd_handler(s->listen_fd, tcp_chr_accept, NULL, chr);
3544
        }
3545
        qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
3546
        closesocket(s->fd);
3547
        s->fd = -1;
3548
    } else if (size > 0) {
3549
        if (s->do_telnetopt)
3550
            tcp_chr_process_IAC_bytes(chr, s, buf, &size);
3551
        if (size > 0)
3552
            qemu_chr_read(chr, buf, size);
3553
    }
3554
}
3555

    
3556
static void tcp_chr_connect(void *opaque)
3557
{
3558
    CharDriverState *chr = opaque;
3559
    TCPCharDriver *s = chr->opaque;
3560

    
3561
    s->connected = 1;
3562
    qemu_set_fd_handler2(s->fd, tcp_chr_read_poll,
3563
                         tcp_chr_read, NULL, chr);
3564
    qemu_chr_reset(chr);
3565
}
3566

    
3567
#define IACSET(x,a,b,c) x[0] = a; x[1] = b; x[2] = c;
3568
static void tcp_chr_telnet_init(int fd)
3569
{
3570
    char buf[3];
3571
    /* Send the telnet negotion to put telnet in binary, no echo, single char mode */
3572
    IACSET(buf, 0xff, 0xfb, 0x01);  /* IAC WILL ECHO */
3573
    send(fd, (char *)buf, 3, 0);
3574
    IACSET(buf, 0xff, 0xfb, 0x03);  /* IAC WILL Suppress go ahead */
3575
    send(fd, (char *)buf, 3, 0);
3576
    IACSET(buf, 0xff, 0xfb, 0x00);  /* IAC WILL Binary */
3577
    send(fd, (char *)buf, 3, 0);
3578
    IACSET(buf, 0xff, 0xfd, 0x00);  /* IAC DO Binary */
3579
    send(fd, (char *)buf, 3, 0);
3580
}
3581

    
3582
static void socket_set_nodelay(int fd)
3583
{
3584
    int val = 1;
3585
    setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char *)&val, sizeof(val));
3586
}
3587

    
3588
static void tcp_chr_accept(void *opaque)
3589
{
3590
    CharDriverState *chr = opaque;
3591
    TCPCharDriver *s = chr->opaque;
3592
    struct sockaddr_in saddr;
3593
#ifndef _WIN32
3594
    struct sockaddr_un uaddr;
3595
#endif
3596
    struct sockaddr *addr;
3597
    socklen_t len;
3598
    int fd;
3599

    
3600
    for(;;) {
3601
#ifndef _WIN32
3602
        if (s->is_unix) {
3603
            len = sizeof(uaddr);
3604
            addr = (struct sockaddr *)&uaddr;
3605
        } else
3606
#endif
3607
        {
3608
            len = sizeof(saddr);
3609
            addr = (struct sockaddr *)&saddr;
3610
        }
3611
        fd = accept(s->listen_fd, addr, &len);
3612
        if (fd < 0 && errno != EINTR) {
3613
            return;
3614
        } else if (fd >= 0) {
3615
            if (s->do_telnetopt)
3616
                tcp_chr_telnet_init(fd);
3617
            break;
3618
        }
3619
    }
3620
    socket_set_nonblock(fd);
3621
    if (s->do_nodelay)
3622
        socket_set_nodelay(fd);
3623
    s->fd = fd;
3624
    qemu_set_fd_handler(s->listen_fd, NULL, NULL, NULL);
3625
    tcp_chr_connect(chr);
3626
}
3627

    
3628
static void tcp_chr_close(CharDriverState *chr)
3629
{
3630
    TCPCharDriver *s = chr->opaque;
3631
    if (s->fd >= 0)
3632
        closesocket(s->fd);
3633
    if (s->listen_fd >= 0)
3634
        closesocket(s->listen_fd);
3635
    qemu_free(s);
3636
}
3637

    
3638
static CharDriverState *qemu_chr_open_tcp(const char *host_str,
3639
                                          int is_telnet,
3640
                                          int is_unix)
3641
{
3642
    CharDriverState *chr = NULL;
3643
    TCPCharDriver *s = NULL;
3644
    int fd = -1, ret, err, val;
3645
    int is_listen = 0;
3646
    int is_waitconnect = 1;
3647
    int do_nodelay = 0;
3648
    const char *ptr;
3649
    struct sockaddr_in saddr;
3650
#ifndef _WIN32
3651
    struct sockaddr_un uaddr;
3652
#endif
3653
    struct sockaddr *addr;
3654
    socklen_t addrlen;
3655

    
3656
#ifndef _WIN32
3657
    if (is_unix) {
3658
        addr = (struct sockaddr *)&uaddr;
3659
        addrlen = sizeof(uaddr);
3660
        if (parse_unix_path(&uaddr, host_str) < 0)
3661
            goto fail;
3662
    } else
3663
#endif
3664
    {
3665
        addr = (struct sockaddr *)&saddr;
3666
        addrlen = sizeof(saddr);
3667
        if (parse_host_port(&saddr, host_str) < 0)
3668
            goto fail;
3669
    }
3670

    
3671
    ptr = host_str;
3672
    while((ptr = strchr(ptr,','))) {
3673
        ptr++;
3674
        if (!strncmp(ptr,"server",6)) {
3675
            is_listen = 1;
3676
        } else if (!strncmp(ptr,"nowait",6)) {
3677
            is_waitconnect = 0;
3678
        } else if (!strncmp(ptr,"nodelay",6)) {
3679
            do_nodelay = 1;
3680
        } else {
3681
            printf("Unknown option: %s\n", ptr);
3682
            goto fail;
3683
        }
3684
    }
3685
    if (!is_listen)
3686
        is_waitconnect = 0;
3687

    
3688
    chr = qemu_mallocz(sizeof(CharDriverState));
3689
    if (!chr)
3690
        goto fail;
3691
    s = qemu_mallocz(sizeof(TCPCharDriver));
3692
    if (!s)
3693
        goto fail;
3694

    
3695
#ifndef _WIN32
3696
    if (is_unix)
3697
        fd = socket(PF_UNIX, SOCK_STREAM, 0);
3698
    else
3699
#endif
3700
        fd = socket(PF_INET, SOCK_STREAM, 0);
3701

    
3702
    if (fd < 0)
3703
        goto fail;
3704

    
3705
    if (!is_waitconnect)
3706
        socket_set_nonblock(fd);
3707

    
3708
    s->connected = 0;
3709
    s->fd = -1;
3710
    s->listen_fd = -1;
3711
    s->is_unix = is_unix;
3712
    s->do_nodelay = do_nodelay && !is_unix;
3713

    
3714
    chr->opaque = s;
3715
    chr->chr_write = tcp_chr_write;
3716
    chr->chr_close = tcp_chr_close;
3717

    
3718
    if (is_listen) {
3719
        /* allow fast reuse */
3720
#ifndef _WIN32
3721
        if (is_unix) {
3722
            char path[109];
3723
            pstrcpy(path, sizeof(path), uaddr.sun_path);
3724
            unlink(path);
3725
        } else
3726
#endif
3727
        {
3728
            val = 1;
3729
            setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const char *)&val, sizeof(val));
3730
        }
3731

    
3732
        ret = bind(fd, addr, addrlen);
3733
        if (ret < 0)
3734
            goto fail;
3735

    
3736
        ret = listen(fd, 0);
3737
        if (ret < 0)
3738
            goto fail;
3739

    
3740
        s->listen_fd = fd;
3741
        qemu_set_fd_handler(s->listen_fd, tcp_chr_accept, NULL, chr);
3742
        if (is_telnet)
3743
            s->do_telnetopt = 1;
3744
    } else {
3745
        for(;;) {
3746
            ret = connect(fd, addr, addrlen);
3747
            if (ret < 0) {
3748
                err = socket_error();
3749
                if (err == EINTR || err == EWOULDBLOCK) {
3750
                } else if (err == EINPROGRESS) {
3751
                    break;
3752
#ifdef _WIN32
3753
                } else if (err == WSAEALREADY) {
3754
                    break;
3755
#endif
3756
                } else {
3757
                    goto fail;
3758
                }
3759
            } else {
3760
                s->connected = 1;
3761
                break;
3762
            }
3763
        }
3764
        s->fd = fd;
3765
        socket_set_nodelay(fd);
3766
        if (s->connected)
3767
            tcp_chr_connect(chr);
3768
        else
3769
            qemu_set_fd_handler(s->fd, NULL, tcp_chr_connect, chr);
3770
    }
3771

    
3772
    if (is_listen && is_waitconnect) {
3773
        printf("QEMU waiting for connection on: %s\n", host_str);
3774
        tcp_chr_accept(chr);
3775
        socket_set_nonblock(s->listen_fd);
3776
    }
3777

    
3778
    return chr;
3779
 fail:
3780
    if (fd >= 0)
3781
        closesocket(fd);
3782
    qemu_free(s);
3783
    qemu_free(chr);
3784
    return NULL;
3785
}
3786

    
3787
CharDriverState *qemu_chr_open(const char *filename)
3788
{
3789
    const char *p;
3790

    
3791
    if (!strcmp(filename, "vc")) {
3792
        return text_console_init(&display_state, 0);
3793
    } else if (strstart(filename, "vc:", &p)) {
3794
        return text_console_init(&display_state, p);
3795
    } else if (!strcmp(filename, "null")) {
3796
        return qemu_chr_open_null();
3797
    } else
3798
    if (strstart(filename, "tcp:", &p)) {
3799
        return qemu_chr_open_tcp(p, 0, 0);
3800
    } else
3801
    if (strstart(filename, "telnet:", &p)) {
3802
        return qemu_chr_open_tcp(p, 1, 0);
3803
    } else
3804
    if (strstart(filename, "udp:", &p)) {
3805
        return qemu_chr_open_udp(p);
3806
    } else
3807
    if (strstart(filename, "mon:", &p)) {
3808
        CharDriverState *drv = qemu_chr_open(p);
3809
        if (drv) {
3810
            drv = qemu_chr_open_mux(drv);
3811
            monitor_init(drv, !nographic);
3812
            return drv;
3813
        }
3814
        printf("Unable to open driver: %s\n", p);
3815
        return 0;
3816
    } else
3817
#ifndef _WIN32
3818
    if (strstart(filename, "unix:", &p)) {
3819
        return qemu_chr_open_tcp(p, 0, 1);
3820
    } else if (strstart(filename, "file:", &p)) {
3821
        return qemu_chr_open_file_out(p);
3822
    } else if (strstart(filename, "pipe:", &p)) {
3823
        return qemu_chr_open_pipe(p);
3824
    } else if (!strcmp(filename, "pty")) {
3825
        return qemu_chr_open_pty();
3826
    } else if (!strcmp(filename, "stdio")) {
3827
        return qemu_chr_open_stdio();
3828
    } else
3829
#if defined(__linux__)
3830
    if (strstart(filename, "/dev/parport", NULL)) {
3831
        return qemu_chr_open_pp(filename);
3832
    } else
3833
#endif
3834
#if defined(__linux__) || defined(__sun__) || defined(__FreeBSD__) \
3835
    || defined(__NetBSD__) || defined(__OpenBSD__)
3836
    if (strstart(filename, "/dev/", NULL)) {
3837
        return qemu_chr_open_tty(filename);
3838
    } else
3839
#endif
3840
#else /* !_WIN32 */
3841
    if (strstart(filename, "COM", NULL)) {
3842
        return qemu_chr_open_win(filename);
3843
    } else
3844
    if (strstart(filename, "pipe:", &p)) {
3845
        return qemu_chr_open_win_pipe(p);
3846
    } else
3847
    if (strstart(filename, "con:", NULL)) {
3848
        return qemu_chr_open_win_con(filename);
3849
    } else
3850
    if (strstart(filename, "file:", &p)) {
3851
        return qemu_chr_open_win_file_out(p);
3852
    } else
3853
#endif
3854
#ifdef CONFIG_BRLAPI
3855
    if (!strcmp(filename, "braille")) {
3856
        return chr_baum_init();
3857
    } else
3858
#endif
3859
    {
3860
        return NULL;
3861
    }
3862
}
3863

    
3864
void qemu_chr_close(CharDriverState *chr)
3865
{
3866
    if (chr->chr_close)
3867
        chr->chr_close(chr);
3868
    qemu_free(chr);
3869
}
3870

    
3871
/***********************************************************/
3872
/* network device redirectors */
3873

    
3874
__attribute__ (( unused ))
3875
static void hex_dump(FILE *f, const uint8_t *buf, int size)
3876
{
3877
    int len, i, j, c;
3878

    
3879
    for(i=0;i<size;i+=16) {
3880
        len = size - i;
3881
        if (len > 16)
3882
            len = 16;
3883
        fprintf(f, "%08x ", i);
3884
        for(j=0;j<16;j++) {
3885
            if (j < len)
3886
                fprintf(f, " %02x", buf[i+j]);
3887
            else
3888
                fprintf(f, "   ");
3889
        }
3890
        fprintf(f, " ");
3891
        for(j=0;j<len;j++) {
3892
            c = buf[i+j];
3893
            if (c < ' ' || c > '~')
3894
                c = '.';
3895
            fprintf(f, "%c", c);
3896
        }
3897
        fprintf(f, "\n");
3898
    }
3899
}
3900

    
3901
static int parse_macaddr(uint8_t *macaddr, const char *p)
3902
{
3903
    int i;
3904
    char *last_char;
3905
    long int offset;
3906

    
3907
    errno = 0;
3908
    offset = strtol(p, &last_char, 0);    
3909
    if (0 == errno && '\0' == *last_char &&
3910
            offset >= 0 && offset <= 0xFFFFFF) {
3911
        macaddr[3] = (offset & 0xFF0000) >> 16;
3912
        macaddr[4] = (offset & 0xFF00) >> 8;
3913
        macaddr[5] = offset & 0xFF;
3914
        return 0;
3915
    } else {
3916
        for(i = 0; i < 6; i++) {
3917
            macaddr[i] = strtol(p, (char **)&p, 16);
3918
            if (i == 5) {
3919
                if (*p != '\0')
3920
                    return -1;
3921
            } else {
3922
                if (*p != ':' && *p != '-')
3923
                    return -1;
3924
                p++;
3925
            }
3926
        }
3927
        return 0;    
3928
    }
3929

    
3930
    return -1;
3931
}
3932

    
3933
static int get_str_sep(char *buf, int buf_size, const char **pp, int sep)
3934
{
3935
    const char *p, *p1;
3936
    int len;
3937
    p = *pp;
3938
    p1 = strchr(p, sep);
3939
    if (!p1)
3940
        return -1;
3941
    len = p1 - p;
3942
    p1++;
3943
    if (buf_size > 0) {
3944
        if (len > buf_size - 1)
3945
            len = buf_size - 1;
3946
        memcpy(buf, p, len);
3947
        buf[len] = '\0';
3948
    }
3949
    *pp = p1;
3950
    return 0;
3951
}
3952

    
3953
int parse_host_src_port(struct sockaddr_in *haddr,
3954
                        struct sockaddr_in *saddr,
3955
                        const char *input_str)
3956
{
3957
    char *str = strdup(input_str);
3958
    char *host_str = str;
3959
    char *src_str;
3960
    const char *src_str2;
3961
    char *ptr;
3962

    
3963
    /*
3964
     * Chop off any extra arguments at the end of the string which
3965
     * would start with a comma, then fill in the src port information
3966
     * if it was provided else use the "any address" and "any port".
3967
     */
3968
    if ((ptr = strchr(str,',')))
3969
        *ptr = '\0';
3970

    
3971
    if ((src_str = strchr(input_str,'@'))) {
3972
        *src_str = '\0';
3973
        src_str++;
3974
    }
3975

    
3976
    if (parse_host_port(haddr, host_str) < 0)
3977
        goto fail;
3978

    
3979
    src_str2 = src_str;
3980
    if (!src_str || *src_str == '\0')
3981
        src_str2 = ":0";
3982

    
3983
    if (parse_host_port(saddr, src_str2) < 0)
3984
        goto fail;
3985

    
3986
    free(str);
3987
    return(0);
3988

    
3989
fail:
3990
    free(str);
3991
    return -1;
3992
}
3993

    
3994
int parse_host_port(struct sockaddr_in *saddr, const char *str)
3995
{
3996
    char buf[512];
3997
    struct hostent *he;
3998
    const char *p, *r;
3999
    int port;
4000

    
4001
    p = str;
4002
    if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
4003
        return -1;
4004
    saddr->sin_family = AF_INET;
4005
    if (buf[0] == '\0') {
4006
        saddr->sin_addr.s_addr = 0;
4007
    } else {
4008
        if (isdigit(buf[0])) {
4009
            if (!inet_aton(buf, &saddr->sin_addr))
4010
                return -1;
4011
        } else {
4012
            if ((he = gethostbyname(buf)) == NULL)
4013
                return - 1;
4014
            saddr->sin_addr = *(struct in_addr *)he->h_addr;
4015
        }
4016
    }
4017
    port = strtol(p, (char **)&r, 0);
4018
    if (r == p)
4019
        return -1;
4020
    saddr->sin_port = htons(port);
4021
    return 0;
4022
}
4023

    
4024
#ifndef _WIN32
4025
static int parse_unix_path(struct sockaddr_un *uaddr, const char *str)
4026
{
4027
    const char *p;
4028
    int len;
4029

    
4030
    len = MIN(108, strlen(str));
4031
    p = strchr(str, ',');
4032
    if (p)
4033
        len = MIN(len, p - str);
4034

    
4035
    memset(uaddr, 0, sizeof(*uaddr));
4036

    
4037
    uaddr->sun_family = AF_UNIX;
4038
    memcpy(uaddr->sun_path, str, len);
4039

    
4040
    return 0;
4041
}
4042
#endif
4043

    
4044
/* find or alloc a new VLAN */
4045
VLANState *qemu_find_vlan(int id)
4046
{
4047
    VLANState **pvlan, *vlan;
4048
    for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) {
4049
        if (vlan->id == id)
4050
            return vlan;
4051
    }
4052
    vlan = qemu_mallocz(sizeof(VLANState));
4053
    if (!vlan)
4054
        return NULL;
4055
    vlan->id = id;
4056
    vlan->next = NULL;
4057
    pvlan = &first_vlan;
4058
    while (*pvlan != NULL)
4059
        pvlan = &(*pvlan)->next;
4060
    *pvlan = vlan;
4061
    return vlan;
4062
}
4063

    
4064
VLANClientState *qemu_new_vlan_client(VLANState *vlan,
4065
                                      IOReadHandler *fd_read,
4066
                                      IOCanRWHandler *fd_can_read,
4067
                                      void *opaque)
4068
{
4069
    VLANClientState *vc, **pvc;
4070
    vc = qemu_mallocz(sizeof(VLANClientState));
4071
    if (!vc)
4072
        return NULL;
4073
    vc->fd_read = fd_read;
4074
    vc->fd_can_read = fd_can_read;
4075
    vc->opaque = opaque;
4076
    vc->vlan = vlan;
4077

    
4078
    vc->next = NULL;
4079
    pvc = &vlan->first_client;
4080
    while (*pvc != NULL)
4081
        pvc = &(*pvc)->next;
4082
    *pvc = vc;
4083
    return vc;
4084
}
4085

    
4086
void qemu_del_vlan_client(VLANClientState *vc)
4087
{
4088
    VLANClientState **pvc = &vc->vlan->first_client;
4089

    
4090
    while (*pvc != NULL)
4091
        if (*pvc == vc) {
4092
            *pvc = vc->next;
4093
            free(vc);
4094
            break;
4095
        } else
4096
            pvc = &(*pvc)->next;
4097
}
4098

    
4099
int qemu_can_send_packet(VLANClientState *vc1)
4100
{
4101
    VLANState *vlan = vc1->vlan;
4102
    VLANClientState *vc;
4103

    
4104
    for(vc = vlan->first_client; vc != NULL; vc = vc->next) {
4105
        if (vc != vc1) {
4106
            if (vc->fd_can_read && vc->fd_can_read(vc->opaque))
4107
                return 1;
4108
        }
4109
    }
4110
    return 0;
4111
}
4112

    
4113
void qemu_send_packet(VLANClientState *vc1, const uint8_t *buf, int size)
4114
{
4115
    VLANState *vlan = vc1->vlan;
4116
    VLANClientState *vc;
4117

    
4118
#if 0
4119
    printf("vlan %d send:\n", vlan->id);
4120
    hex_dump(stdout, buf, size);
4121
#endif
4122
    for(vc = vlan->first_client; vc != NULL; vc = vc->next) {
4123
        if (vc != vc1) {
4124
            vc->fd_read(vc->opaque, buf, size);
4125
        }
4126
    }
4127
}
4128

    
4129
#if defined(CONFIG_SLIRP)
4130

    
4131
/* slirp network adapter */
4132

    
4133
static int slirp_inited;
4134
static VLANClientState *slirp_vc;
4135

    
4136
int slirp_can_output(void)
4137
{
4138
    return !slirp_vc || qemu_can_send_packet(slirp_vc);
4139
}
4140

    
4141
void slirp_output(const uint8_t *pkt, int pkt_len)
4142
{
4143
#if 0
4144
    printf("slirp output:\n");
4145
    hex_dump(stdout, pkt, pkt_len);
4146
#endif
4147
    if (!slirp_vc)
4148
        return;
4149
    qemu_send_packet(slirp_vc, pkt, pkt_len);
4150
}
4151

    
4152
static void slirp_receive(void *opaque, const uint8_t *buf, int size)
4153
{
4154
#if 0
4155
    printf("slirp input:\n");
4156
    hex_dump(stdout, buf, size);
4157
#endif
4158
    slirp_input(buf, size);
4159
}
4160

    
4161
static int net_slirp_init(VLANState *vlan)
4162
{
4163
    if (!slirp_inited) {
4164
        slirp_inited = 1;
4165
        slirp_init();
4166
    }
4167
    slirp_vc = qemu_new_vlan_client(vlan,
4168
                                    slirp_receive, NULL, NULL);
4169
    snprintf(slirp_vc->info_str, sizeof(slirp_vc->info_str), "user redirector");
4170
    return 0;
4171
}
4172

    
4173
static void net_slirp_redir(const char *redir_str)
4174
{
4175
    int is_udp;
4176
    char buf[256], *r;
4177
    const char *p;
4178
    struct in_addr guest_addr;
4179
    int host_port, guest_port;
4180

    
4181
    if (!slirp_inited) {
4182
        slirp_inited = 1;
4183
        slirp_init();
4184
    }
4185

    
4186
    p = redir_str;
4187
    if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
4188
        goto fail;
4189
    if (!strcmp(buf, "tcp")) {
4190
        is_udp = 0;
4191
    } else if (!strcmp(buf, "udp")) {
4192
        is_udp = 1;
4193
    } else {
4194
        goto fail;
4195
    }
4196

    
4197
    if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
4198
        goto fail;
4199
    host_port = strtol(buf, &r, 0);
4200
    if (r == buf)
4201
        goto fail;
4202

    
4203
    if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
4204
        goto fail;
4205
    if (buf[0] == '\0') {
4206
        pstrcpy(buf, sizeof(buf), "10.0.2.15");
4207
    }
4208
    if (!inet_aton(buf, &guest_addr))
4209
        goto fail;
4210

    
4211
    guest_port = strtol(p, &r, 0);
4212
    if (r == p)
4213
        goto fail;
4214

    
4215
    if (slirp_redir(is_udp, host_port, guest_addr, guest_port) < 0) {
4216
        fprintf(stderr, "qemu: could not set up redirection\n");
4217
        exit(1);
4218
    }
4219
    return;
4220
 fail:
4221
    fprintf(stderr, "qemu: syntax: -redir [tcp|udp]:host-port:[guest-host]:guest-port\n");
4222
    exit(1);
4223
}
4224

    
4225
#ifndef _WIN32
4226

    
4227
char smb_dir[1024];
4228

    
4229
static void erase_dir(char *dir_name)
4230
{
4231
    DIR *d;
4232
    struct dirent *de;
4233
    char filename[1024];
4234

    
4235
    /* erase all the files in the directory */
4236
    if ((d = opendir(dir_name)) != 0) {
4237
        for(;;) {
4238
            de = readdir(d);
4239
            if (!de)
4240
                break;
4241
            if (strcmp(de->d_name, ".") != 0 &&
4242
                strcmp(de->d_name, "..") != 0) {
4243
                snprintf(filename, sizeof(filename), "%s/%s",
4244
                         smb_dir, de->d_name);
4245
                if (unlink(filename) != 0)  /* is it a directory? */
4246
                    erase_dir(filename);
4247
            }
4248
        }
4249
        closedir(d);
4250
        rmdir(dir_name);
4251
    }
4252
}
4253

    
4254
/* automatic user mode samba server configuration */
4255
static void smb_exit(void)
4256
{
4257
    erase_dir(smb_dir);
4258
}
4259

    
4260
/* automatic user mode samba server configuration */
4261
static void net_slirp_smb(const char *exported_dir)
4262
{
4263
    char smb_conf[1024];
4264
    char smb_cmdline[1024];
4265
    FILE *f;
4266

    
4267
    if (!slirp_inited) {
4268
        slirp_inited = 1;
4269
        slirp_init();
4270
    }
4271

    
4272
    /* XXX: better tmp dir construction */
4273
    snprintf(smb_dir, sizeof(smb_dir), "/tmp/qemu-smb.%d", getpid());
4274
    if (mkdir(smb_dir, 0700) < 0) {
4275
        fprintf(stderr, "qemu: could not create samba server dir '%s'\n", smb_dir);
4276
        exit(1);
4277
    }
4278
    snprintf(smb_conf, sizeof(smb_conf), "%s/%s", smb_dir, "smb.conf");
4279

    
4280
    f = fopen(smb_conf, "w");
4281
    if (!f) {
4282
        fprintf(stderr, "qemu: could not create samba server configuration file '%s'\n", smb_conf);
4283
        exit(1);
4284
    }
4285
    fprintf(f,
4286
            "[global]\n"
4287
            "private dir=%s\n"
4288
            "smb ports=0\n"
4289
            "socket address=127.0.0.1\n"
4290
            "pid directory=%s\n"
4291
            "lock directory=%s\n"
4292
            "log file=%s/log.smbd\n"
4293
            "smb passwd file=%s/smbpasswd\n"
4294
            "security = share\n"
4295
            "[qemu]\n"
4296
            "path=%s\n"
4297
            "read only=no\n"
4298
            "guest ok=yes\n",
4299
            smb_dir,
4300
            smb_dir,
4301
            smb_dir,
4302
            smb_dir,
4303
            smb_dir,
4304
            exported_dir
4305
            );
4306
    fclose(f);
4307
    atexit(smb_exit);
4308

    
4309
    snprintf(smb_cmdline, sizeof(smb_cmdline), "%s -s %s",
4310
             SMBD_COMMAND, smb_conf);
4311

    
4312
    slirp_add_exec(0, smb_cmdline, 4, 139);
4313
}
4314

    
4315
#endif /* !defined(_WIN32) */
4316
void do_info_slirp(void)
4317
{
4318
    slirp_stats();
4319
}
4320

    
4321
#endif /* CONFIG_SLIRP */
4322

    
4323
#if !defined(_WIN32)
4324

    
4325
typedef struct TAPState {
4326
    VLANClientState *vc;
4327
    int fd;
4328
    char down_script[1024];
4329
} TAPState;
4330

    
4331
static void tap_receive(void *opaque, const uint8_t *buf, int size)
4332
{
4333
    TAPState *s = opaque;
4334
    int ret;
4335
    for(;;) {
4336
        ret = write(s->fd, buf, size);
4337
        if (ret < 0 && (errno == EINTR || errno == EAGAIN)) {
4338
        } else {
4339
            break;
4340
        }
4341
    }
4342
}
4343

    
4344
static void tap_send(void *opaque)
4345
{
4346
    TAPState *s = opaque;
4347
    uint8_t buf[4096];
4348
    int size;
4349

    
4350
#ifdef __sun__
4351
    struct strbuf sbuf;
4352
    int f = 0;
4353
    sbuf.maxlen = sizeof(buf);
4354
    sbuf.buf = buf;
4355
    size = getmsg(s->fd, NULL, &sbuf, &f) >=0 ? sbuf.len : -1;
4356
#else
4357
    size = read(s->fd, buf, sizeof(buf));
4358
#endif
4359
    if (size > 0) {
4360
        qemu_send_packet(s->vc, buf, size);
4361
    }
4362
}
4363

    
4364
/* fd support */
4365

    
4366
static TAPState *net_tap_fd_init(VLANState *vlan, int fd)
4367
{
4368
    TAPState *s;
4369

    
4370
    s = qemu_mallocz(sizeof(TAPState));
4371
    if (!s)
4372
        return NULL;
4373
    s->fd = fd;
4374
    s->vc = qemu_new_vlan_client(vlan, tap_receive, NULL, s);
4375
    qemu_set_fd_handler(s->fd, tap_send, NULL, s);
4376
    snprintf(s->vc->info_str, sizeof(s->vc->info_str), "tap: fd=%d", fd);
4377
    return s;
4378
}
4379

    
4380
#if defined (_BSD) || defined (__FreeBSD_kernel__)
4381
static int tap_open(char *ifname, int ifname_size)
4382
{
4383
    int fd;
4384
    char *dev;
4385
    struct stat s;
4386

    
4387
    TFR(fd = open("/dev/tap", O_RDWR));
4388
    if (fd < 0) {
4389
        fprintf(stderr, "warning: could not open /dev/tap: no virtual network emulation\n");
4390
        return -1;
4391
    }
4392

    
4393
    fstat(fd, &s);
4394
    dev = devname(s.st_rdev, S_IFCHR);
4395
    pstrcpy(ifname, ifname_size, dev);
4396

    
4397
    fcntl(fd, F_SETFL, O_NONBLOCK);
4398
    return fd;
4399
}
4400
#elif defined(__sun__)
4401
#define TUNNEWPPA       (('T'<<16) | 0x0001)
4402
/*
4403
 * Allocate TAP device, returns opened fd.
4404
 * Stores dev name in the first arg(must be large enough).
4405
 */
4406
int tap_alloc(char *dev, size_t dev_size)
4407
{
4408
    int tap_fd, if_fd, ppa = -1;
4409
    static int ip_fd = 0;
4410
    char *ptr;
4411

    
4412
    static int arp_fd = 0;
4413
    int ip_muxid, arp_muxid;
4414
    struct strioctl  strioc_if, strioc_ppa;
4415
    int link_type = I_PLINK;;
4416
    struct lifreq ifr;
4417
    char actual_name[32] = "";
4418

    
4419
    memset(&ifr, 0x0, sizeof(ifr));
4420

    
4421
    if( *dev ){
4422
       ptr = dev;
4423
       while( *ptr && !isdigit((int)*ptr) ) ptr++;
4424
       ppa = atoi(ptr);
4425
    }
4426

    
4427
    /* Check if IP device was opened */
4428
    if( ip_fd )
4429
       close(ip_fd);
4430

    
4431
    TFR(ip_fd = open("/dev/udp", O_RDWR, 0));
4432
    if (ip_fd < 0) {
4433
       syslog(LOG_ERR, "Can't open /dev/ip (actually /dev/udp)");
4434
       return -1;
4435
    }
4436

    
4437
    TFR(tap_fd = open("/dev/tap", O_RDWR, 0));
4438
    if (tap_fd < 0) {
4439
       syslog(LOG_ERR, "Can't open /dev/tap");
4440
       return -1;
4441
    }
4442

    
4443
    /* Assign a new PPA and get its unit number. */
4444
    strioc_ppa.ic_cmd = TUNNEWPPA;
4445
    strioc_ppa.ic_timout = 0;
4446
    strioc_ppa.ic_len = sizeof(ppa);
4447
    strioc_ppa.ic_dp = (char *)&ppa;
4448
    if ((ppa = ioctl (tap_fd, I_STR, &strioc_ppa)) < 0)
4449
       syslog (LOG_ERR, "Can't assign new interface");
4450

    
4451
    TFR(if_fd = open("/dev/tap", O_RDWR, 0));
4452
    if (if_fd < 0) {
4453
       syslog(LOG_ERR, "Can't open /dev/tap (2)");
4454
       return -1;
4455
    }
4456
    if(ioctl(if_fd, I_PUSH, "ip") < 0){
4457
       syslog(LOG_ERR, "Can't push IP module");
4458
       return -1;
4459
    }
4460

    
4461
    if (ioctl(if_fd, SIOCGLIFFLAGS, &ifr) < 0)
4462
        syslog(LOG_ERR, "Can't get flags\n");
4463

    
4464
    snprintf (actual_name, 32, "tap%d", ppa);
4465
    strncpy (ifr.lifr_name, actual_name, sizeof (ifr.lifr_name));
4466

    
4467
    ifr.lifr_ppa = ppa;
4468
    /* Assign ppa according to the unit number returned by tun device */
4469

    
4470
    if (ioctl (if_fd, SIOCSLIFNAME, &ifr) < 0)
4471
        syslog (LOG_ERR, "Can't set PPA %d", ppa);
4472
    if (ioctl(if_fd, SIOCGLIFFLAGS, &ifr) <0)
4473
        syslog (LOG_ERR, "Can't get flags\n");
4474
    /* Push arp module to if_fd */
4475
    if (ioctl (if_fd, I_PUSH, "arp") < 0)
4476
        syslog (LOG_ERR, "Can't push ARP module (2)");
4477

    
4478
    /* Push arp module to ip_fd */
4479
    if (ioctl (ip_fd, I_POP, NULL) < 0)
4480
        syslog (LOG_ERR, "I_POP failed\n");
4481
    if (ioctl (ip_fd, I_PUSH, "arp") < 0)
4482
        syslog (LOG_ERR, "Can't push ARP module (3)\n");
4483
    /* Open arp_fd */
4484
    TFR(arp_fd = open ("/dev/tap", O_RDWR, 0));
4485
    if (arp_fd < 0)
4486
       syslog (LOG_ERR, "Can't open %s\n", "/dev/tap");
4487

    
4488
    /* Set ifname to arp */
4489
    strioc_if.ic_cmd = SIOCSLIFNAME;
4490
    strioc_if.ic_timout = 0;
4491
    strioc_if.ic_len = sizeof(ifr);
4492
    strioc_if.ic_dp = (char *)&ifr;
4493
    if (ioctl(arp_fd, I_STR, &strioc_if) < 0){
4494
        syslog (LOG_ERR, "Can't set ifname to arp\n");
4495
    }
4496

    
4497
    if((ip_muxid = ioctl(ip_fd, I_LINK, if_fd)) < 0){
4498
       syslog(LOG_ERR, "Can't link TAP device to IP");
4499
       return -1;
4500
    }
4501

    
4502
    if ((arp_muxid = ioctl (ip_fd, link_type, arp_fd)) < 0)
4503
        syslog (LOG_ERR, "Can't link TAP device to ARP");
4504

    
4505
    close (if_fd);
4506

    
4507
    memset(&ifr, 0x0, sizeof(ifr));
4508
    strncpy (ifr.lifr_name, actual_name, sizeof (ifr.lifr_name));
4509
    ifr.lifr_ip_muxid  = ip_muxid;
4510
    ifr.lifr_arp_muxid = arp_muxid;
4511

    
4512
    if (ioctl (ip_fd, SIOCSLIFMUXID, &ifr) < 0)
4513
    {
4514
      ioctl (ip_fd, I_PUNLINK , arp_muxid);
4515
      ioctl (ip_fd, I_PUNLINK, ip_muxid);
4516
      syslog (LOG_ERR, "Can't set multiplexor id");
4517
    }
4518

    
4519
    snprintf(dev, dev_size, "tap%d", ppa);
4520
    return tap_fd;
4521
}
4522

    
4523
static int tap_open(char *ifname, int ifname_size)
4524
{
4525
    char  dev[10]="";
4526
    int fd;
4527
    if( (fd = tap_alloc(dev, sizeof(dev))) < 0 ){
4528
       fprintf(stderr, "Cannot allocate TAP device\n");
4529
       return -1;
4530
    }
4531
    pstrcpy(ifname, ifname_size, dev);
4532
    fcntl(fd, F_SETFL, O_NONBLOCK);
4533
    return fd;
4534
}
4535
#else
4536
static int tap_open(char *ifname, int ifname_size)
4537
{
4538
    struct ifreq ifr;
4539
    int fd, ret;
4540

    
4541
    TFR(fd = open("/dev/net/tun", O_RDWR));
4542
    if (fd < 0) {
4543
        fprintf(stderr, "warning: could not open /dev/net/tun: no virtual network emulation\n");
4544
        return -1;
4545
    }
4546
    memset(&ifr, 0, sizeof(ifr));
4547
    ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
4548
    if (ifname[0] != '\0')
4549
        pstrcpy(ifr.ifr_name, IFNAMSIZ, ifname);
4550
    else
4551
        pstrcpy(ifr.ifr_name, IFNAMSIZ, "tap%d");
4552
    ret = ioctl(fd, TUNSETIFF, (void *) &ifr);
4553
    if (ret != 0) {
4554
        fprintf(stderr, "warning: could not configure /dev/net/tun: no virtual network emulation\n");
4555
        close(fd);
4556
        return -1;
4557
    }
4558
    pstrcpy(ifname, ifname_size, ifr.ifr_name);
4559
    fcntl(fd, F_SETFL, O_NONBLOCK);
4560
    return fd;
4561
}
4562
#endif
4563

    
4564
static int launch_script(const char *setup_script, const char *ifname, int fd)
4565
{
4566
    int pid, status;
4567
    char *args[3];
4568
    char **parg;
4569

    
4570
        /* try to launch network script */
4571
        pid = fork();
4572
        if (pid >= 0) {
4573
            if (pid == 0) {
4574
                int open_max = sysconf (_SC_OPEN_MAX), i;
4575
                for (i = 0; i < open_max; i++)
4576
                    if (i != STDIN_FILENO &&
4577
                        i != STDOUT_FILENO &&
4578
                        i != STDERR_FILENO &&
4579
                        i != fd)
4580
                        close(i);
4581

    
4582
                parg = args;
4583
                *parg++ = (char *)setup_script;
4584
                *parg++ = (char *)ifname;
4585
                *parg++ = NULL;
4586
                execv(setup_script, args);
4587
                _exit(1);
4588
            }
4589
            while (waitpid(pid, &status, 0) != pid);
4590
            if (!WIFEXITED(status) ||
4591
                WEXITSTATUS(status) != 0) {
4592
                fprintf(stderr, "%s: could not launch network script\n",
4593
                        setup_script);
4594
                return -1;
4595
            }
4596
        }
4597
    return 0;
4598
}
4599

    
4600
static int net_tap_init(VLANState *vlan, const char *ifname1,
4601
                        const char *setup_script, const char *down_script)
4602
{
4603
    TAPState *s;
4604
    int fd;
4605
    char ifname[128];
4606

    
4607
    if (ifname1 != NULL)
4608
        pstrcpy(ifname, sizeof(ifname), ifname1);
4609
    else
4610
        ifname[0] = '\0';
4611
    TFR(fd = tap_open(ifname, sizeof(ifname)));
4612
    if (fd < 0)
4613
        return -1;
4614

    
4615
    if (!setup_script || !strcmp(setup_script, "no"))
4616
        setup_script = "";
4617
    if (setup_script[0] != '\0') {
4618
        if (launch_script(setup_script, ifname, fd))
4619
            return -1;
4620
    }
4621
    s = net_tap_fd_init(vlan, fd);
4622
    if (!s)
4623
        return -1;
4624
    snprintf(s->vc->info_str, sizeof(s->vc->info_str),
4625
             "tap: ifname=%s setup_script=%s", ifname, setup_script);
4626
    if (down_script && strcmp(down_script, "no"))
4627
        snprintf(s->down_script, sizeof(s->down_script), "%s", down_script);
4628
    return 0;
4629
}
4630

    
4631
#endif /* !_WIN32 */
4632

    
4633
#if defined(CONFIG_VDE)
4634
typedef struct VDEState {
4635
    VLANClientState *vc;
4636
    VDECONN *vde;
4637
} VDEState;
4638

    
4639
static void vde_to_qemu(void *opaque)
4640
{
4641
    VDEState *s = opaque;
4642
    uint8_t buf[4096];
4643
    int size;
4644

    
4645
    size = vde_recv(s->vde, buf, sizeof(buf), 0);
4646
    if (size > 0) {
4647
        qemu_send_packet(s->vc, buf, size);
4648
    }
4649
}
4650

    
4651
static void vde_from_qemu(void *opaque, const uint8_t *buf, int size)
4652
{
4653
    VDEState *s = opaque;
4654
    int ret;
4655
    for(;;) {
4656
        ret = vde_send(s->vde, buf, size, 0);
4657
        if (ret < 0 && errno == EINTR) {
4658
        } else {
4659
            break;
4660
        }
4661
    }
4662
}
4663

    
4664
static int net_vde_init(VLANState *vlan, const char *sock, int port,
4665
                        const char *group, int mode)
4666
{
4667
    VDEState *s;
4668
    char *init_group = strlen(group) ? (char *)group : NULL;
4669
    char *init_sock = strlen(sock) ? (char *)sock : NULL;
4670

    
4671
    struct vde_open_args args = {
4672
        .port = port,
4673
        .group = init_group,
4674
        .mode = mode,
4675
    };
4676

    
4677
    s = qemu_mallocz(sizeof(VDEState));
4678
    if (!s)
4679
        return -1;
4680
    s->vde = vde_open(init_sock, "QEMU", &args);
4681
    if (!s->vde){
4682
        free(s);
4683
        return -1;
4684
    }
4685
    s->vc = qemu_new_vlan_client(vlan, vde_from_qemu, NULL, s);
4686
    qemu_set_fd_handler(vde_datafd(s->vde), vde_to_qemu, NULL, s);
4687
    snprintf(s->vc->info_str, sizeof(s->vc->info_str), "vde: sock=%s fd=%d",
4688
             sock, vde_datafd(s->vde));
4689
    return 0;
4690
}
4691
#endif
4692

    
4693
/* network connection */
4694
typedef struct NetSocketState {
4695
    VLANClientState *vc;
4696
    int fd;
4697
    int state; /* 0 = getting length, 1 = getting data */
4698
    int index;
4699
    int packet_len;
4700
    uint8_t buf[4096];
4701
    struct sockaddr_in dgram_dst; /* contains inet host and port destination iff connectionless (SOCK_DGRAM) */
4702
} NetSocketState;
4703

    
4704
typedef struct NetSocketListenState {
4705
    VLANState *vlan;
4706
    int fd;
4707
} NetSocketListenState;
4708

    
4709
/* XXX: we consider we can send the whole packet without blocking */
4710
static void net_socket_receive(void *opaque, const uint8_t *buf, int size)
4711
{
4712
    NetSocketState *s = opaque;
4713
    uint32_t len;
4714
    len = htonl(size);
4715

    
4716
    send_all(s->fd, (const uint8_t *)&len, sizeof(len));
4717
    send_all(s->fd, buf, size);
4718
}
4719

    
4720
static void net_socket_receive_dgram(void *opaque, const uint8_t *buf, int size)
4721
{
4722
    NetSocketState *s = opaque;
4723
    sendto(s->fd, buf, size, 0,
4724
           (struct sockaddr *)&s->dgram_dst, sizeof(s->dgram_dst));
4725
}
4726

    
4727
static void net_socket_send(void *opaque)
4728
{
4729
    NetSocketState *s = opaque;
4730
    int l, size, err;
4731
    uint8_t buf1[4096];
4732
    const uint8_t *buf;
4733

    
4734
    size = recv(s->fd, buf1, sizeof(buf1), 0);
4735
    if (size < 0) {
4736
        err = socket_error();
4737
        if (err != EWOULDBLOCK)
4738
            goto eoc;
4739
    } else if (size == 0) {
4740
        /* end of connection */
4741
    eoc:
4742
        qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
4743
        closesocket(s->fd);
4744
        return;
4745
    }
4746
    buf = buf1;
4747
    while (size > 0) {
4748
        /* reassemble a packet from the network */
4749
        switch(s->state) {
4750
        case 0:
4751
            l = 4 - s->index;
4752
            if (l > size)
4753
                l = size;
4754
            memcpy(s->buf + s->index, buf, l);
4755
            buf += l;
4756
            size -= l;
4757
            s->index += l;
4758
            if (s->index == 4) {
4759
                /* got length */
4760
                s->packet_len = ntohl(*(uint32_t *)s->buf);
4761
                s->index = 0;
4762
                s->state = 1;
4763
            }
4764
            break;
4765
        case 1:
4766
            l = s->packet_len - s->index;
4767
            if (l > size)
4768
                l = size;
4769
            memcpy(s->buf + s->index, buf, l);
4770
            s->index += l;
4771
            buf += l;
4772
            size -= l;
4773
            if (s->index >= s->packet_len) {
4774
                qemu_send_packet(s->vc, s->buf, s->packet_len);
4775
                s->index = 0;
4776
                s->state = 0;
4777
            }
4778
            break;
4779
        }
4780
    }
4781
}
4782

    
4783
static void net_socket_send_dgram(void *opaque)
4784
{
4785
    NetSocketState *s = opaque;
4786
    int size;
4787

    
4788
    size = recv(s->fd, s->buf, sizeof(s->buf), 0);
4789
    if (size < 0)
4790
        return;
4791
    if (size == 0) {
4792
        /* end of connection */
4793
        qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
4794
        return;
4795
    }
4796
    qemu_send_packet(s->vc, s->buf, size);
4797
}
4798

    
4799
static int net_socket_mcast_create(struct sockaddr_in *mcastaddr)
4800
{
4801
    struct ip_mreq imr;
4802
    int fd;
4803
    int val, ret;
4804
    if (!IN_MULTICAST(ntohl(mcastaddr->sin_addr.s_addr))) {
4805
        fprintf(stderr, "qemu: error: specified mcastaddr \"%s\" (0x%08x) does not contain a multicast address\n",
4806
                inet_ntoa(mcastaddr->sin_addr),
4807
                (int)ntohl(mcastaddr->sin_addr.s_addr));
4808
        return -1;
4809

    
4810
    }
4811
    fd = socket(PF_INET, SOCK_DGRAM, 0);
4812
    if (fd < 0) {
4813
        perror("socket(PF_INET, SOCK_DGRAM)");
4814
        return -1;
4815
    }
4816

    
4817
    val = 1;
4818
    ret=setsockopt(fd, SOL_SOCKET, SO_REUSEADDR,
4819
                   (const char *)&val, sizeof(val));
4820
    if (ret < 0) {
4821
        perror("setsockopt(SOL_SOCKET, SO_REUSEADDR)");
4822
        goto fail;
4823
    }
4824

    
4825
    ret = bind(fd, (struct sockaddr *)mcastaddr, sizeof(*mcastaddr));
4826
    if (ret < 0) {
4827
        perror("bind");
4828
        goto fail;
4829
    }
4830

    
4831
    /* Add host to multicast group */
4832
    imr.imr_multiaddr = mcastaddr->sin_addr;
4833
    imr.imr_interface.s_addr = htonl(INADDR_ANY);
4834

    
4835
    ret = setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP,
4836
                     (const char *)&imr, sizeof(struct ip_mreq));
4837
    if (ret < 0) {
4838
        perror("setsockopt(IP_ADD_MEMBERSHIP)");
4839
        goto fail;
4840
    }
4841

    
4842
    /* Force mcast msgs to loopback (eg. several QEMUs in same host */
4843
    val = 1;
4844
    ret=setsockopt(fd, IPPROTO_IP, IP_MULTICAST_LOOP,
4845
                   (const char *)&val, sizeof(val));
4846
    if (ret < 0) {
4847
        perror("setsockopt(SOL_IP, IP_MULTICAST_LOOP)");
4848
        goto fail;
4849
    }
4850

    
4851
    socket_set_nonblock(fd);
4852
    return fd;
4853
fail:
4854
    if (fd >= 0)
4855
        closesocket(fd);
4856
    return -1;
4857
}
4858

    
4859
static NetSocketState *net_socket_fd_init_dgram(VLANState *vlan, int fd,
4860
                                          int is_connected)
4861
{
4862
    struct sockaddr_in saddr;
4863
    int newfd;
4864
    socklen_t saddr_len;
4865
    NetSocketState *s;
4866

    
4867
    /* fd passed: multicast: "learn" dgram_dst address from bound address and save it
4868
     * Because this may be "shared" socket from a "master" process, datagrams would be recv()
4869
     * by ONLY ONE process: we must "clone" this dgram socket --jjo
4870
     */
4871

    
4872
    if (is_connected) {
4873
        if (getsockname(fd, (struct sockaddr *) &saddr, &saddr_len) == 0) {
4874
            /* must be bound */
4875
            if (saddr.sin_addr.s_addr==0) {
4876
                fprintf(stderr, "qemu: error: init_dgram: fd=%d unbound, cannot setup multicast dst addr\n",
4877
                        fd);
4878
                return NULL;
4879
            }
4880
            /* clone dgram socket */
4881
            newfd = net_socket_mcast_create(&saddr);
4882
            if (newfd < 0) {
4883
                /* error already reported by net_socket_mcast_create() */
4884
                close(fd);
4885
                return NULL;
4886
            }
4887
            /* clone newfd to fd, close newfd */
4888
            dup2(newfd, fd);
4889
            close(newfd);
4890

    
4891
        } else {
4892
            fprintf(stderr, "qemu: error: init_dgram: fd=%d failed getsockname(): %s\n",
4893
                    fd, strerror(errno));
4894
            return NULL;
4895
        }
4896
    }
4897

    
4898
    s = qemu_mallocz(sizeof(NetSocketState));
4899
    if (!s)
4900
        return NULL;
4901
    s->fd = fd;
4902

    
4903
    s->vc = qemu_new_vlan_client(vlan, net_socket_receive_dgram, NULL, s);
4904
    qemu_set_fd_handler(s->fd, net_socket_send_dgram, NULL, s);
4905

    
4906
    /* mcast: save bound address as dst */
4907
    if (is_connected) s->dgram_dst=saddr;
4908

    
4909
    snprintf(s->vc->info_str, sizeof(s->vc->info_str),
4910
            "socket: fd=%d (%s mcast=%s:%d)",
4911
            fd, is_connected? "cloned" : "",
4912
            inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
4913
    return s;
4914
}
4915

    
4916
static void net_socket_connect(void *opaque)
4917
{
4918
    NetSocketState *s = opaque;
4919
    qemu_set_fd_handler(s->fd, net_socket_send, NULL, s);
4920
}
4921

    
4922
static NetSocketState *net_socket_fd_init_stream(VLANState *vlan, int fd,
4923
                                          int is_connected)
4924
{
4925
    NetSocketState *s;
4926
    s = qemu_mallocz(sizeof(NetSocketState));
4927
    if (!s)
4928
        return NULL;
4929
    s->fd = fd;
4930
    s->vc = qemu_new_vlan_client(vlan,
4931
                                 net_socket_receive, NULL, s);
4932
    snprintf(s->vc->info_str, sizeof(s->vc->info_str),
4933
             "socket: fd=%d", fd);
4934
    if (is_connected) {
4935
        net_socket_connect(s);
4936
    } else {
4937
        qemu_set_fd_handler(s->fd, NULL, net_socket_connect, s);
4938
    }
4939
    return s;
4940
}
4941

    
4942
static NetSocketState *net_socket_fd_init(VLANState *vlan, int fd,
4943
                                          int is_connected)
4944
{
4945
    int so_type=-1, optlen=sizeof(so_type);
4946

    
4947
    if(getsockopt(fd, SOL_SOCKET, SO_TYPE, (char *)&so_type,
4948
        (socklen_t *)&optlen)< 0) {
4949
        fprintf(stderr, "qemu: error: getsockopt(SO_TYPE) for fd=%d failed\n", fd);
4950
        return NULL;
4951
    }
4952
    switch(so_type) {
4953
    case SOCK_DGRAM:
4954
        return net_socket_fd_init_dgram(vlan, fd, is_connected);
4955
    case SOCK_STREAM:
4956
        return net_socket_fd_init_stream(vlan, fd, is_connected);
4957
    default:
4958
        /* who knows ... this could be a eg. a pty, do warn and continue as stream */
4959
        fprintf(stderr, "qemu: warning: socket type=%d for fd=%d is not SOCK_DGRAM or SOCK_STREAM\n", so_type, fd);
4960
        return net_socket_fd_init_stream(vlan, fd, is_connected);
4961
    }
4962
    return NULL;
4963
}
4964

    
4965
static void net_socket_accept(void *opaque)
4966
{
4967
    NetSocketListenState *s = opaque;
4968
    NetSocketState *s1;
4969
    struct sockaddr_in saddr;
4970
    socklen_t len;
4971
    int fd;
4972

    
4973
    for(;;) {
4974
        len = sizeof(saddr);
4975
        fd = accept(s->fd, (struct sockaddr *)&saddr, &len);
4976
        if (fd < 0 && errno != EINTR) {
4977
            return;
4978
        } else if (fd >= 0) {
4979
            break;
4980
        }
4981
    }
4982
    s1 = net_socket_fd_init(s->vlan, fd, 1);
4983
    if (!s1) {
4984
        closesocket(fd);
4985
    } else {
4986
        snprintf(s1->vc->info_str, sizeof(s1->vc->info_str),
4987
                 "socket: connection from %s:%d",
4988
                 inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
4989
    }
4990
}
4991

    
4992
static int net_socket_listen_init(VLANState *vlan, const char *host_str)
4993
{
4994
    NetSocketListenState *s;
4995
    int fd, val, ret;
4996
    struct sockaddr_in saddr;
4997

    
4998
    if (parse_host_port(&saddr, host_str) < 0)
4999
        return -1;
5000

    
5001
    s = qemu_mallocz(sizeof(NetSocketListenState));
5002
    if (!s)
5003
        return -1;
5004

    
5005
    fd = socket(PF_INET, SOCK_STREAM, 0);
5006
    if (fd < 0) {
5007
        perror("socket");
5008
        return -1;
5009
    }
5010
    socket_set_nonblock(fd);
5011

    
5012
    /* allow fast reuse */
5013
    val = 1;
5014
    setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const char *)&val, sizeof(val));
5015

    
5016
    ret = bind(fd, (struct sockaddr *)&saddr, sizeof(saddr));
5017
    if (ret < 0) {
5018
        perror("bind");
5019
        return -1;
5020
    }
5021
    ret = listen(fd, 0);
5022
    if (ret < 0) {
5023
        perror("listen");
5024
        return -1;
5025
    }
5026
    s->vlan = vlan;
5027
    s->fd = fd;
5028
    qemu_set_fd_handler(fd, net_socket_accept, NULL, s);
5029
    return 0;
5030
}
5031

    
5032
static int net_socket_connect_init(VLANState *vlan, const char *host_str)
5033
{
5034
    NetSocketState *s;
5035
    int fd, connected, ret, err;
5036
    struct sockaddr_in saddr;
5037

    
5038
    if (parse_host_port(&saddr, host_str) < 0)
5039
        return -1;
5040

    
5041
    fd = socket(PF_INET, SOCK_STREAM, 0);
5042
    if (fd < 0) {
5043
        perror("socket");
5044
        return -1;
5045
    }
5046
    socket_set_nonblock(fd);
5047

    
5048
    connected = 0;
5049
    for(;;) {
5050
        ret = connect(fd, (struct sockaddr *)&saddr, sizeof(saddr));
5051
        if (ret < 0) {
5052
            err = socket_error();
5053
            if (err == EINTR || err == EWOULDBLOCK) {
5054
            } else if (err == EINPROGRESS) {
5055
                break;
5056
#ifdef _WIN32
5057
            } else if (err == WSAEALREADY) {
5058
                break;
5059
#endif
5060
            } else {
5061
                perror("connect");
5062
                closesocket(fd);
5063
                return -1;
5064
            }
5065
        } else {
5066
            connected = 1;
5067
            break;
5068
        }
5069
    }
5070
    s = net_socket_fd_init(vlan, fd, connected);
5071
    if (!s)
5072
        return -1;
5073
    snprintf(s->vc->info_str, sizeof(s->vc->info_str),
5074
             "socket: connect to %s:%d",
5075
             inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
5076
    return 0;
5077
}
5078

    
5079
static int net_socket_mcast_init(VLANState *vlan, const char *host_str)
5080
{
5081
    NetSocketState *s;
5082
    int fd;
5083
    struct sockaddr_in saddr;
5084

    
5085
    if (parse_host_port(&saddr, host_str) < 0)
5086
        return -1;
5087

    
5088

    
5089
    fd = net_socket_mcast_create(&saddr);
5090
    if (fd < 0)
5091
        return -1;
5092

    
5093
    s = net_socket_fd_init(vlan, fd, 0);
5094
    if (!s)
5095
        return -1;
5096

    
5097
    s->dgram_dst = saddr;
5098

    
5099
    snprintf(s->vc->info_str, sizeof(s->vc->info_str),
5100
             "socket: mcast=%s:%d",
5101
             inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
5102
    return 0;
5103

    
5104
}
5105

    
5106
static const char *get_opt_name(char *buf, int buf_size, const char *p)
5107
{
5108
    char *q;
5109

    
5110
    q = buf;
5111
    while (*p != '\0' && *p != '=') {
5112
        if (q && (q - buf) < buf_size - 1)
5113
            *q++ = *p;
5114
        p++;
5115
    }
5116
    if (q)
5117
        *q = '\0';
5118

    
5119
    return p;
5120
}
5121

    
5122
static const char *get_opt_value(char *buf, int buf_size, const char *p)
5123
{
5124
    char *q;
5125

    
5126
    q = buf;
5127
    while (*p != '\0') {
5128
        if (*p == ',') {
5129
            if (*(p + 1) != ',')
5130
                break;
5131
            p++;
5132
        }
5133
        if (q && (q - buf) < buf_size - 1)
5134
            *q++ = *p;
5135
        p++;
5136
    }
5137
    if (q)
5138
        *q = '\0';
5139

    
5140
    return p;
5141
}
5142

    
5143
static int get_param_value(char *buf, int buf_size,
5144
                           const char *tag, const char *str)
5145
{
5146
    const char *p;
5147
    char option[128];
5148

    
5149
    p = str;
5150
    for(;;) {
5151
        p = get_opt_name(option, sizeof(option), p);
5152
        if (*p != '=')
5153
            break;
5154
        p++;
5155
        if (!strcmp(tag, option)) {
5156
            (void)get_opt_value(buf, buf_size, p);
5157
            return strlen(buf);
5158
        } else {
5159
            p = get_opt_value(NULL, 0, p);
5160
        }
5161
        if (*p != ',')
5162
            break;
5163
        p++;
5164
    }
5165
    return 0;
5166
}
5167

    
5168
static int check_params(char *buf, int buf_size,
5169
                        const char * const *params, const char *str)
5170
{
5171
    const char *p;
5172
    int i;
5173

    
5174
    p = str;
5175
    for(;;) {
5176
        p = get_opt_name(buf, buf_size, p);
5177
        if (*p != '=')
5178
            return -1;
5179
        p++;
5180
        for(i = 0; params[i] != NULL; i++)
5181
            if (!strcmp(params[i], buf))
5182
                break;
5183
        if (params[i] == NULL)
5184
            return -1;
5185
        p = get_opt_value(NULL, 0, p);
5186
        if (*p != ',')
5187
            break;
5188
        p++;
5189
    }
5190
    return 0;
5191
}
5192

    
5193
static int net_client_init(const char *device, const char *p)
5194
{
5195
    char buf[1024];
5196
    int vlan_id, ret;
5197
    VLANState *vlan;
5198

    
5199
    vlan_id = 0;
5200
    if (get_param_value(buf, sizeof(buf), "vlan", p)) {
5201
        vlan_id = strtol(buf, NULL, 0);
5202
    }
5203
    vlan = qemu_find_vlan(vlan_id);
5204
    if (!vlan) {
5205
        fprintf(stderr, "Could not create vlan %d\n", vlan_id);
5206
        return -1;
5207
    }
5208
    if (!strcmp(device, "nic")) {
5209
        NICInfo *nd;
5210
        uint8_t *macaddr;
5211

    
5212
        if (nb_nics >= MAX_NICS) {
5213
            fprintf(stderr, "Too Many NICs\n");
5214
            return -1;
5215
        }
5216
        nd = &nd_table[nb_nics];
5217
        macaddr = nd->macaddr;
5218
        macaddr[0] = 0x52;
5219
        macaddr[1] = 0x54;
5220
        macaddr[2] = 0x00;
5221
        macaddr[3] = 0x12;
5222
        macaddr[4] = 0x34;
5223
        macaddr[5] = 0x56 + nb_nics;
5224

    
5225
        if (get_param_value(buf, sizeof(buf), "macaddr", p)) {
5226
            if (parse_macaddr(macaddr, buf) < 0) {
5227
                fprintf(stderr, "invalid syntax for ethernet address\n");
5228
                return -1;
5229
            }
5230
        }
5231
        if (get_param_value(buf, sizeof(buf), "model", p)) {
5232
            nd->model = strdup(buf);
5233
        }
5234
        nd->vlan = vlan;
5235
        nb_nics++;
5236
        vlan->nb_guest_devs++;
5237
        ret = 0;
5238
    } else
5239
    if (!strcmp(device, "none")) {
5240
        /* does nothing. It is needed to signal that no network cards
5241
           are wanted */
5242
        ret = 0;
5243
    } else
5244
#ifdef CONFIG_SLIRP
5245
    if (!strcmp(device, "user")) {
5246
        if (get_param_value(buf, sizeof(buf), "hostname", p)) {
5247
            pstrcpy(slirp_hostname, sizeof(slirp_hostname), buf);
5248
        }
5249
        vlan->nb_host_devs++;
5250
        ret = net_slirp_init(vlan);
5251
    } else
5252
#endif
5253
#ifdef _WIN32
5254
    if (!strcmp(device, "tap")) {
5255
        char ifname[64];
5256
        if (get_param_value(ifname, sizeof(ifname), "ifname", p) <= 0) {
5257
            fprintf(stderr, "tap: no interface name\n");
5258
            return -1;
5259
        }
5260
        vlan->nb_host_devs++;
5261
        ret = tap_win32_init(vlan, ifname);
5262
    } else
5263
#else
5264
    if (!strcmp(device, "tap")) {
5265
        char ifname[64];
5266
        char setup_script[1024], down_script[1024];
5267
        int fd;
5268
        vlan->nb_host_devs++;
5269
        if (get_param_value(buf, sizeof(buf), "fd", p) > 0) {
5270
            fd = strtol(buf, NULL, 0);
5271
            fcntl(fd, F_SETFL, O_NONBLOCK);
5272
            ret = -1;
5273
            if (net_tap_fd_init(vlan, fd))
5274
                ret = 0;
5275
        } else {
5276
            if (get_param_value(ifname, sizeof(ifname), "ifname", p) <= 0) {
5277
                ifname[0] = '\0';
5278
            }
5279
            if (get_param_value(setup_script, sizeof(setup_script), "script", p) == 0) {
5280
                pstrcpy(setup_script, sizeof(setup_script), DEFAULT_NETWORK_SCRIPT);
5281
            }
5282
            if (get_param_value(down_script, sizeof(down_script), "downscript", p) == 0) {
5283
                pstrcpy(down_script, sizeof(down_script), DEFAULT_NETWORK_DOWN_SCRIPT);
5284
            }
5285
            ret = net_tap_init(vlan, ifname, setup_script, down_script);
5286
        }
5287
    } else
5288
#endif
5289
    if (!strcmp(device, "socket")) {
5290
        if (get_param_value(buf, sizeof(buf), "fd", p) > 0) {
5291
            int fd;
5292
            fd = strtol(buf, NULL, 0);
5293
            ret = -1;
5294
            if (net_socket_fd_init(vlan, fd, 1))
5295
                ret = 0;
5296
        } else if (get_param_value(buf, sizeof(buf), "listen", p) > 0) {
5297
            ret = net_socket_listen_init(vlan, buf);
5298
        } else if (get_param_value(buf, sizeof(buf), "connect", p) > 0) {
5299
            ret = net_socket_connect_init(vlan, buf);
5300
        } else if (get_param_value(buf, sizeof(buf), "mcast", p) > 0) {
5301
            ret = net_socket_mcast_init(vlan, buf);
5302
        } else {
5303
            fprintf(stderr, "Unknown socket options: %s\n", p);
5304
            return -1;
5305
        }
5306
        vlan->nb_host_devs++;
5307
    } else
5308
#ifdef CONFIG_VDE
5309
    if (!strcmp(device, "vde")) {
5310
        char vde_sock[1024], vde_group[512];
5311
        int vde_port, vde_mode;
5312
        vlan->nb_host_devs++;
5313
        if (get_param_value(vde_sock, sizeof(vde_sock), "sock", p) <= 0) {
5314
            vde_sock[0] = '\0';
5315
        }
5316
        if (get_param_value(buf, sizeof(buf), "port", p) > 0) {
5317
            vde_port = strtol(buf, NULL, 10);
5318
        } else {
5319
            vde_port = 0;
5320
        }
5321
        if (get_param_value(vde_group, sizeof(vde_group), "group", p) <= 0) {
5322
            vde_group[0] = '\0';
5323
        }
5324
        if (get_param_value(buf, sizeof(buf), "mode", p) > 0) {
5325
            vde_mode = strtol(buf, NULL, 8);
5326
        } else {
5327
            vde_mode = 0700;
5328
        }
5329
        ret = net_vde_init(vlan, vde_sock, vde_port, vde_group, vde_mode);
5330
    } else
5331
#endif
5332
    {
5333
        fprintf(stderr, "Unknown network device: %s\n", device);
5334
        return -1;
5335
    }
5336
    if (ret < 0) {
5337
        fprintf(stderr, "Could not initialize device '%s'\n", device);
5338
    }
5339

    
5340
    return ret;
5341
}
5342

    
5343
static int net_client_parse(const char *str)
5344
{
5345
    const char *p;
5346
    char *q;
5347
    char device[64];
5348

    
5349
    p = str;
5350
    q = device;
5351
    while (*p != '\0' && *p != ',') {
5352
        if ((q - device) < sizeof(device) - 1)
5353
            *q++ = *p;
5354
        p++;
5355
    }
5356
    *q = '\0';
5357
    if (*p == ',')
5358
        p++;
5359

    
5360
    return net_client_init(device, p);
5361
}
5362

    
5363
void do_info_network(void)
5364
{
5365
    VLANState *vlan;
5366
    VLANClientState *vc;
5367

    
5368
    for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) {
5369
        term_printf("VLAN %d devices:\n", vlan->id);
5370
        for(vc = vlan->first_client; vc != NULL; vc = vc->next)
5371
            term_printf("  %s\n", vc->info_str);
5372
    }
5373
}
5374

    
5375
#define HD_ALIAS "index=%d,media=disk"
5376
#ifdef TARGET_PPC
5377
#define CDROM_ALIAS "index=1,media=cdrom"
5378
#else
5379
#define CDROM_ALIAS "index=2,media=cdrom"
5380
#endif
5381
#define FD_ALIAS "index=%d,if=floppy"
5382
#define PFLASH_ALIAS "if=pflash"
5383
#define MTD_ALIAS "if=mtd"
5384
#define SD_ALIAS "index=0,if=sd"
5385

    
5386
static int drive_add(const char *file, const char *fmt, ...)
5387
{
5388
    va_list ap;
5389

    
5390
    if (nb_drives_opt >= MAX_DRIVES) {
5391
        fprintf(stderr, "qemu: too many drives\n");
5392
        exit(1);
5393
    }
5394

    
5395
    drives_opt[nb_drives_opt].file = file;
5396
    va_start(ap, fmt);
5397
    vsnprintf(drives_opt[nb_drives_opt].opt,
5398
              sizeof(drives_opt[0].opt), fmt, ap);
5399
    va_end(ap);
5400

    
5401
    return nb_drives_opt++;
5402
}
5403

    
5404
int drive_get_index(BlockInterfaceType type, int bus, int unit)
5405
{
5406
    int index;
5407

    
5408
    /* seek interface, bus and unit */
5409

    
5410
    for (index = 0; index < nb_drives; index++)
5411
        if (drives_table[index].type == type &&
5412
            drives_table[index].bus == bus &&
5413
            drives_table[index].unit == unit)
5414
        return index;
5415

    
5416
    return -1;
5417
}
5418

    
5419
int drive_get_max_bus(BlockInterfaceType type)
5420
{
5421
    int max_bus;
5422
    int index;
5423

    
5424
    max_bus = -1;
5425
    for (index = 0; index < nb_drives; index++) {
5426
        if(drives_table[index].type == type &&
5427
           drives_table[index].bus > max_bus)
5428
            max_bus = drives_table[index].bus;
5429
    }
5430
    return max_bus;
5431
}
5432

    
5433
static void bdrv_format_print(void *opaque, const char *name)
5434
{
5435
    fprintf(stderr, " %s", name);
5436
}
5437

    
5438
static int drive_init(struct drive_opt *arg, int snapshot,
5439
                      QEMUMachine *machine)
5440
{
5441
    char buf[128];
5442
    char file[1024];
5443
    char devname[128];
5444
    const char *mediastr = "";
5445
    BlockInterfaceType type;
5446
    enum { MEDIA_DISK, MEDIA_CDROM } media;
5447
    int bus_id, unit_id;
5448
    int cyls, heads, secs, translation;
5449
    BlockDriverState *bdrv;
5450
    BlockDriver *drv = NULL;
5451
    int max_devs;
5452
    int index;
5453
    int cache;
5454
    int bdrv_flags;
5455
    char *str = arg->opt;
5456
    static const char * const params[] = { "bus", "unit", "if", "index",
5457
                                           "cyls", "heads", "secs", "trans",
5458
                                           "media", "snapshot", "file",
5459
                                           "cache", "format", NULL };
5460

    
5461
    if (check_params(buf, sizeof(buf), params, str) < 0) {
5462
         fprintf(stderr, "qemu: unknown parameter '%s' in '%s'\n",
5463
                         buf, str);
5464
         return -1;
5465
    }
5466

    
5467
    file[0] = 0;
5468
    cyls = heads = secs = 0;
5469
    bus_id = 0;
5470
    unit_id = -1;
5471
    translation = BIOS_ATA_TRANSLATION_AUTO;
5472
    index = -1;
5473
    cache = 1;
5474

    
5475
    if (!strcmp(machine->name, "realview") ||
5476
        !strcmp(machine->name, "SS-5") ||
5477
        !strcmp(machine->name, "SS-10") ||
5478
        !strcmp(machine->name, "SS-600MP") ||
5479
        !strcmp(machine->name, "versatilepb") ||
5480
        !strcmp(machine->name, "versatileab")) {
5481
        type = IF_SCSI;
5482
        max_devs = MAX_SCSI_DEVS;
5483
        pstrcpy(devname, sizeof(devname), "scsi");
5484
    } else {
5485
        type = IF_IDE;
5486
        max_devs = MAX_IDE_DEVS;
5487
        pstrcpy(devname, sizeof(devname), "ide");
5488
    }
5489
    media = MEDIA_DISK;
5490

    
5491
    /* extract parameters */
5492

    
5493
    if (get_param_value(buf, sizeof(buf), "bus", str)) {
5494
        bus_id = strtol(buf, NULL, 0);
5495
        if (bus_id < 0) {
5496
            fprintf(stderr, "qemu: '%s' invalid bus id\n", str);
5497
            return -1;
5498
        }
5499
    }
5500

    
5501
    if (get_param_value(buf, sizeof(buf), "unit", str)) {
5502
        unit_id = strtol(buf, NULL, 0);
5503
        if (unit_id < 0) {
5504
            fprintf(stderr, "qemu: '%s' invalid unit id\n", str);
5505
            return -1;
5506
        }
5507
    }
5508

    
5509
    if (get_param_value(buf, sizeof(buf), "if", str)) {
5510
        pstrcpy(devname, sizeof(devname), buf);
5511
        if (!strcmp(buf, "ide")) {
5512
            type = IF_IDE;
5513
            max_devs = MAX_IDE_DEVS;
5514
        } else if (!strcmp(buf, "scsi")) {
5515
            type = IF_SCSI;
5516
            max_devs = MAX_SCSI_DEVS;
5517
        } else if (!strcmp(buf, "floppy")) {
5518
            type = IF_FLOPPY;
5519
            max_devs = 0;
5520
        } else if (!strcmp(buf, "pflash")) {
5521
            type = IF_PFLASH;
5522
            max_devs = 0;
5523
        } else if (!strcmp(buf, "mtd")) {
5524
            type = IF_MTD;
5525
            max_devs = 0;
5526
        } else if (!strcmp(buf, "sd")) {
5527
            type = IF_SD;
5528
            max_devs = 0;
5529
        } else {
5530
            fprintf(stderr, "qemu: '%s' unsupported bus type '%s'\n", str, buf);
5531
            return -1;
5532
        }
5533
    }
5534

    
5535
    if (get_param_value(buf, sizeof(buf), "index", str)) {
5536
        index = strtol(buf, NULL, 0);
5537
        if (index < 0) {
5538
            fprintf(stderr, "qemu: '%s' invalid index\n", str);
5539
            return -1;
5540
        }
5541
    }
5542

    
5543
    if (get_param_value(buf, sizeof(buf), "cyls", str)) {
5544
        cyls = strtol(buf, NULL, 0);
5545
    }
5546

    
5547
    if (get_param_value(buf, sizeof(buf), "heads", str)) {
5548
        heads = strtol(buf, NULL, 0);
5549
    }
5550

    
5551
    if (get_param_value(buf, sizeof(buf), "secs", str)) {
5552
        secs = strtol(buf, NULL, 0);
5553
    }
5554

    
5555
    if (cyls || heads || secs) {
5556
        if (cyls < 1 || cyls > 16383) {
5557
            fprintf(stderr, "qemu: '%s' invalid physical cyls number\n", str);
5558
            return -1;
5559
        }
5560
        if (heads < 1 || heads > 16) {
5561
            fprintf(stderr, "qemu: '%s' invalid physical heads number\n", str);
5562
            return -1;
5563
        }
5564
        if (secs < 1 || secs > 63) {
5565
            fprintf(stderr, "qemu: '%s' invalid physical secs number\n", str);
5566
            return -1;
5567
        }
5568
    }
5569

    
5570
    if (get_param_value(buf, sizeof(buf), "trans", str)) {
5571
        if (!cyls) {
5572
            fprintf(stderr,
5573
                    "qemu: '%s' trans must be used with cyls,heads and secs\n",
5574
                    str);
5575
            return -1;
5576
        }
5577
        if (!strcmp(buf, "none"))
5578
            translation = BIOS_ATA_TRANSLATION_NONE;
5579
        else if (!strcmp(buf, "lba"))
5580
            translation = BIOS_ATA_TRANSLATION_LBA;
5581
        else if (!strcmp(buf, "auto"))
5582
            translation = BIOS_ATA_TRANSLATION_AUTO;
5583
        else {
5584
            fprintf(stderr, "qemu: '%s' invalid translation type\n", str);
5585
            return -1;
5586
        }
5587
    }
5588

    
5589
    if (get_param_value(buf, sizeof(buf), "media", str)) {
5590
        if (!strcmp(buf, "disk")) {
5591
            media = MEDIA_DISK;
5592
        } else if (!strcmp(buf, "cdrom")) {
5593
            if (cyls || secs || heads) {
5594
                fprintf(stderr,
5595
                        "qemu: '%s' invalid physical CHS format\n", str);
5596
                return -1;
5597
            }
5598
            media = MEDIA_CDROM;
5599
        } else {
5600
            fprintf(stderr, "qemu: '%s' invalid media\n", str);
5601
            return -1;
5602
        }
5603
    }
5604

    
5605
    if (get_param_value(buf, sizeof(buf), "snapshot", str)) {
5606
        if (!strcmp(buf, "on"))
5607
            snapshot = 1;
5608
        else if (!strcmp(buf, "off"))
5609
            snapshot = 0;
5610
        else {
5611
            fprintf(stderr, "qemu: '%s' invalid snapshot option\n", str);
5612
            return -1;
5613
        }
5614
    }
5615

    
5616
    if (get_param_value(buf, sizeof(buf), "cache", str)) {
5617
        if (!strcmp(buf, "off"))
5618
            cache = 0;
5619
        else if (!strcmp(buf, "on"))
5620
            cache = 1;
5621
        else {
5622
           fprintf(stderr, "qemu: invalid cache option\n");
5623
           return -1;
5624
        }
5625
    }
5626

    
5627
    if (get_param_value(buf, sizeof(buf), "format", str)) {
5628
       if (strcmp(buf, "?") == 0) {
5629
            fprintf(stderr, "qemu: Supported formats:");
5630
            bdrv_iterate_format(bdrv_format_print, NULL);
5631
            fprintf(stderr, "\n");
5632
            return -1;
5633
        }
5634
        drv = bdrv_find_format(buf);
5635
        if (!drv) {
5636
            fprintf(stderr, "qemu: '%s' invalid format\n", buf);
5637
            return -1;
5638
        }
5639
    }
5640

    
5641
    if (arg->file == NULL)
5642
        get_param_value(file, sizeof(file), "file", str);
5643
    else
5644
        pstrcpy(file, sizeof(file), arg->file);
5645

    
5646
    /* compute bus and unit according index */
5647

    
5648
    if (index != -1) {
5649
        if (bus_id != 0 || unit_id != -1) {
5650
            fprintf(stderr,
5651
                    "qemu: '%s' index cannot be used with bus and unit\n", str);
5652
            return -1;
5653
        }
5654
        if (max_devs == 0)
5655
        {
5656
            unit_id = index;
5657
            bus_id = 0;
5658
        } else {
5659
            unit_id = index % max_devs;
5660
            bus_id = index / max_devs;
5661
        }
5662
    }
5663

    
5664
    /* if user doesn't specify a unit_id,
5665
     * try to find the first free
5666
     */
5667

    
5668
    if (unit_id == -1) {
5669
       unit_id = 0;
5670
       while (drive_get_index(type, bus_id, unit_id) != -1) {
5671
           unit_id++;
5672
           if (max_devs && unit_id >= max_devs) {
5673
               unit_id -= max_devs;
5674
               bus_id++;
5675
           }
5676
       }
5677
    }
5678

    
5679
    /* check unit id */
5680

    
5681
    if (max_devs && unit_id >= max_devs) {
5682
        fprintf(stderr, "qemu: '%s' unit %d too big (max is %d)\n",
5683
                        str, unit_id, max_devs - 1);
5684
        return -1;
5685
    }
5686

    
5687
    /*
5688
     * ignore multiple definitions
5689
     */
5690

    
5691
    if (drive_get_index(type, bus_id, unit_id) != -1)
5692
        return 0;
5693

    
5694
    /* init */
5695

    
5696
    if (type == IF_IDE || type == IF_SCSI)
5697
        mediastr = (media == MEDIA_CDROM) ? "-cd" : "-hd";
5698
    if (max_devs)
5699
        snprintf(buf, sizeof(buf), "%s%i%s%i",
5700
                 devname, bus_id, mediastr, unit_id);
5701
    else
5702
        snprintf(buf, sizeof(buf), "%s%s%i",
5703
                 devname, mediastr, unit_id);
5704
    bdrv = bdrv_new(buf);
5705
    drives_table[nb_drives].bdrv = bdrv;
5706
    drives_table[nb_drives].type = type;
5707
    drives_table[nb_drives].bus = bus_id;
5708
    drives_table[nb_drives].unit = unit_id;
5709
    nb_drives++;
5710

    
5711
    switch(type) {
5712
    case IF_IDE:
5713
    case IF_SCSI:
5714
        switch(media) {
5715
        case MEDIA_DISK:
5716
            if (cyls != 0) {
5717
                bdrv_set_geometry_hint(bdrv, cyls, heads, secs);
5718
                bdrv_set_translation_hint(bdrv, translation);
5719
            }
5720
            break;
5721
        case MEDIA_CDROM:
5722
            bdrv_set_type_hint(bdrv, BDRV_TYPE_CDROM);
5723
            break;
5724
        }
5725
        break;
5726
    case IF_SD:
5727
        /* FIXME: This isn't really a floppy, but it's a reasonable
5728
           approximation.  */
5729
    case IF_FLOPPY:
5730
        bdrv_set_type_hint(bdrv, BDRV_TYPE_FLOPPY);
5731
        break;
5732
    case IF_PFLASH:
5733
    case IF_MTD:
5734
        break;
5735
    }
5736
    if (!file[0])
5737
        return 0;
5738
    bdrv_flags = 0;
5739
    if (snapshot)
5740
        bdrv_flags |= BDRV_O_SNAPSHOT;
5741
    if (!cache)
5742
        bdrv_flags |= BDRV_O_DIRECT;
5743
    if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0 || qemu_key_check(bdrv, file)) {
5744
        fprintf(stderr, "qemu: could not open disk image %s\n",
5745
                        file);
5746
        return -1;
5747
    }
5748
    return 0;
5749
}
5750

    
5751
/***********************************************************/
5752
/* USB devices */
5753

    
5754
static USBPort *used_usb_ports;
5755
static USBPort *free_usb_ports;
5756

    
5757
/* ??? Maybe change this to register a hub to keep track of the topology.  */
5758
void qemu_register_usb_port(USBPort *port, void *opaque, int index,
5759
                            usb_attachfn attach)
5760
{
5761
    port->opaque = opaque;
5762
    port->index = index;
5763
    port->attach = attach;
5764
    port->next = free_usb_ports;
5765
    free_usb_ports = port;
5766
}
5767

    
5768
int usb_device_add_dev(USBDevice *dev)
5769
{
5770
    USBPort *port;
5771

    
5772
    /* Find a USB port to add the device to.  */
5773
    port = free_usb_ports;
5774
    if (!port->next) {
5775
        USBDevice *hub;
5776

    
5777
        /* Create a new hub and chain it on.  */
5778
        free_usb_ports = NULL;
5779
        port->next = used_usb_ports;
5780
        used_usb_ports = port;
5781

    
5782
        hub = usb_hub_init(VM_USB_HUB_SIZE);
5783
        usb_attach(port, hub);
5784
        port = free_usb_ports;
5785
    }
5786

    
5787
    free_usb_ports = port->next;
5788
    port->next = used_usb_ports;
5789
    used_usb_ports = port;
5790
    usb_attach(port, dev);
5791
    return 0;
5792
}
5793

    
5794
static int usb_device_add(const char *devname)
5795
{
5796
    const char *p;
5797
    USBDevice *dev;
5798

    
5799
    if (!free_usb_ports)
5800
        return -1;
5801

    
5802
    if (strstart(devname, "host:", &p)) {
5803
        dev = usb_host_device_open(p);
5804
    } else if (!strcmp(devname, "mouse")) {
5805
        dev = usb_mouse_init();
5806
    } else if (!strcmp(devname, "tablet")) {
5807
        dev = usb_tablet_init();
5808
    } else if (!strcmp(devname, "keyboard")) {
5809
        dev = usb_keyboard_init();
5810
    } else if (strstart(devname, "disk:", &p)) {
5811
        dev = usb_msd_init(p);
5812
    } else if (!strcmp(devname, "wacom-tablet")) {
5813
        dev = usb_wacom_init();
5814
    } else if (strstart(devname, "serial:", &p)) {
5815
        dev = usb_serial_init(p);
5816
#ifdef CONFIG_BRLAPI
5817
    } else if (!strcmp(devname, "braille")) {
5818
        dev = usb_baum_init();
5819
#endif
5820
    } else if (strstart(devname, "net:", &p)) {
5821
        int nic = nb_nics;
5822

    
5823
        if (net_client_init("nic", p) < 0)
5824
            return -1;
5825
        nd_table[nic].model = "usb";
5826
        dev = usb_net_init(&nd_table[nic]);
5827
    } else {
5828
        return -1;
5829
    }
5830
    if (!dev)
5831
        return -1;
5832

    
5833
    return usb_device_add_dev(dev);
5834
}
5835

    
5836
int usb_device_del_addr(int bus_num, int addr)
5837
{
5838
    USBPort *port;
5839
    USBPort **lastp;
5840
    USBDevice *dev;
5841

    
5842
    if (!used_usb_ports)
5843
        return -1;
5844

    
5845
    if (bus_num != 0)
5846
        return -1;
5847

    
5848
    lastp = &used_usb_ports;
5849
    port = used_usb_ports;
5850
    while (port && port->dev->addr != addr) {
5851
        lastp = &port->next;
5852
        port = port->next;
5853
    }
5854

    
5855
    if (!port)
5856
        return -1;
5857

    
5858
    dev = port->dev;
5859
    *lastp = port->next;
5860
    usb_attach(port, NULL);
5861
    dev->handle_destroy(dev);
5862
    port->next = free_usb_ports;
5863
    free_usb_ports = port;
5864
    return 0;
5865
}
5866

    
5867
static int usb_device_del(const char *devname)
5868
{
5869
    int bus_num, addr;
5870
    const char *p;
5871

    
5872
    if (strstart(devname, "host:", &p))
5873
        return usb_host_device_close(p);
5874

    
5875
    if (!used_usb_ports)
5876
        return -1;
5877

    
5878
    p = strchr(devname, '.');
5879
    if (!p)
5880
        return -1;
5881
    bus_num = strtoul(devname, NULL, 0);
5882
    addr = strtoul(p + 1, NULL, 0);
5883

    
5884
    return usb_device_del_addr(bus_num, addr);
5885
}
5886

    
5887
void do_usb_add(const char *devname)
5888
{
5889
    usb_device_add(devname);
5890
}
5891

    
5892
void do_usb_del(const char *devname)
5893
{
5894
    usb_device_del(devname);
5895
}
5896

    
5897
void usb_info(void)
5898
{
5899
    USBDevice *dev;
5900
    USBPort *port;
5901
    const char *speed_str;
5902

    
5903
    if (!usb_enabled) {
5904
        term_printf("USB support not enabled\n");
5905
        return;
5906
    }
5907

    
5908
    for (port = used_usb_ports; port; port = port->next) {
5909
        dev = port->dev;
5910
        if (!dev)
5911
            continue;
5912
        switch(dev->speed) {
5913
        case USB_SPEED_LOW:
5914
            speed_str = "1.5";
5915
            break;
5916
        case USB_SPEED_FULL:
5917
            speed_str = "12";
5918
            break;
5919
        case USB_SPEED_HIGH:
5920
            speed_str = "480";
5921
            break;
5922
        default:
5923
            speed_str = "?";
5924
            break;
5925
        }
5926
        term_printf("  Device %d.%d, Speed %s Mb/s, Product %s\n",
5927
                    0, dev->addr, speed_str, dev->devname);
5928
    }
5929
}
5930

    
5931
/***********************************************************/
5932
/* PCMCIA/Cardbus */
5933

    
5934
static struct pcmcia_socket_entry_s {
5935
    struct pcmcia_socket_s *socket;
5936
    struct pcmcia_socket_entry_s *next;
5937
} *pcmcia_sockets = 0;
5938

    
5939
void pcmcia_socket_register(struct pcmcia_socket_s *socket)
5940
{
5941
    struct pcmcia_socket_entry_s *entry;
5942

    
5943
    entry = qemu_malloc(sizeof(struct pcmcia_socket_entry_s));
5944
    entry->socket = socket;
5945
    entry->next = pcmcia_sockets;
5946
    pcmcia_sockets = entry;
5947
}
5948

    
5949
void pcmcia_socket_unregister(struct pcmcia_socket_s *socket)
5950
{
5951
    struct pcmcia_socket_entry_s *entry, **ptr;
5952

    
5953
    ptr = &pcmcia_sockets;
5954
    for (entry = *ptr; entry; ptr = &entry->next, entry = *ptr)
5955
        if (entry->socket == socket) {
5956
            *ptr = entry->next;
5957
            qemu_free(entry);
5958
        }
5959
}
5960

    
5961
void pcmcia_info(void)
5962
{
5963
    struct pcmcia_socket_entry_s *iter;
5964
    if (!pcmcia_sockets)
5965
        term_printf("No PCMCIA sockets\n");
5966

    
5967
    for (iter = pcmcia_sockets; iter; iter = iter->next)
5968
        term_printf("%s: %s\n", iter->socket->slot_string,
5969
                    iter->socket->attached ? iter->socket->card_string :
5970
                    "Empty");
5971
}
5972

    
5973
/***********************************************************/
5974
/* dumb display */
5975

    
5976
static void dumb_update(DisplayState *ds, int x, int y, int w, int h)
5977
{
5978
}
5979

    
5980
static void dumb_resize(DisplayState *ds, int w, int h)
5981
{
5982
}
5983

    
5984
static void dumb_refresh(DisplayState *ds)
5985
{
5986
#if defined(CONFIG_SDL)
5987
    vga_hw_update();
5988
#endif
5989
}
5990

    
5991
static void dumb_display_init(DisplayState *ds)
5992
{
5993
    ds->data = NULL;
5994
    ds->linesize = 0;
5995
    ds->depth = 0;
5996
    ds->dpy_update = dumb_update;
5997
    ds->dpy_resize = dumb_resize;
5998
    ds->dpy_refresh = dumb_refresh;
5999
    ds->gui_timer_interval = 500;
6000
    ds->idle = 1;
6001
}
6002

    
6003
/***********************************************************/
6004
/* I/O handling */
6005

    
6006
#define MAX_IO_HANDLERS 64
6007

    
6008
typedef struct IOHandlerRecord {
6009
    int fd;
6010
    IOCanRWHandler *fd_read_poll;
6011
    IOHandler *fd_read;
6012
    IOHandler *fd_write;
6013
    int deleted;
6014
    void *opaque;
6015
    /* temporary data */
6016
    struct pollfd *ufd;
6017
    struct IOHandlerRecord *next;
6018
} IOHandlerRecord;
6019

    
6020
static IOHandlerRecord *first_io_handler;
6021

    
6022
/* XXX: fd_read_poll should be suppressed, but an API change is
6023
   necessary in the character devices to suppress fd_can_read(). */
6024
int qemu_set_fd_handler2(int fd,
6025
                         IOCanRWHandler *fd_read_poll,
6026
                         IOHandler *fd_read,
6027
                         IOHandler *fd_write,
6028
                         void *opaque)
6029
{
6030
    IOHandlerRecord **pioh, *ioh;
6031

    
6032
    if (!fd_read && !fd_write) {
6033
        pioh = &first_io_handler;
6034
        for(;;) {
6035
            ioh = *pioh;
6036
            if (ioh == NULL)
6037
                break;
6038
            if (ioh->fd == fd) {
6039
                ioh->deleted = 1;
6040
                break;
6041
            }
6042
            pioh = &ioh->next;
6043
        }
6044
    } else {
6045
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
6046
            if (ioh->fd == fd)
6047
                goto found;
6048
        }
6049
        ioh = qemu_mallocz(sizeof(IOHandlerRecord));
6050
        if (!ioh)
6051
            return -1;
6052
        ioh->next = first_io_handler;
6053
        first_io_handler = ioh;
6054
    found:
6055
        ioh->fd = fd;
6056
        ioh->fd_read_poll = fd_read_poll;
6057
        ioh->fd_read = fd_read;
6058
        ioh->fd_write = fd_write;
6059
        ioh->opaque = opaque;
6060
        ioh->deleted = 0;
6061
    }
6062
    return 0;
6063
}
6064

    
6065
int qemu_set_fd_handler(int fd,
6066
                        IOHandler *fd_read,
6067
                        IOHandler *fd_write,
6068
                        void *opaque)
6069
{
6070
    return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
6071
}
6072

    
6073
/***********************************************************/
6074
/* Polling handling */
6075

    
6076
typedef struct PollingEntry {
6077
    PollingFunc *func;
6078
    void *opaque;
6079
    struct PollingEntry *next;
6080
} PollingEntry;
6081

    
6082
static PollingEntry *first_polling_entry;
6083

    
6084
int qemu_add_polling_cb(PollingFunc *func, void *opaque)
6085
{
6086
    PollingEntry **ppe, *pe;
6087
    pe = qemu_mallocz(sizeof(PollingEntry));
6088
    if (!pe)
6089
        return -1;
6090
    pe->func = func;
6091
    pe->opaque = opaque;
6092
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next);
6093
    *ppe = pe;
6094
    return 0;
6095
}
6096

    
6097
void qemu_del_polling_cb(PollingFunc *func, void *opaque)
6098
{
6099
    PollingEntry **ppe, *pe;
6100
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next) {
6101
        pe = *ppe;
6102
        if (pe->func == func && pe->opaque == opaque) {
6103
            *ppe = pe->next;
6104
            qemu_free(pe);
6105
            break;
6106
        }
6107
    }
6108
}
6109

    
6110
#ifdef _WIN32
6111
/***********************************************************/
6112
/* Wait objects support */
6113
typedef struct WaitObjects {
6114
    int num;
6115
    HANDLE events[MAXIMUM_WAIT_OBJECTS + 1];
6116
    WaitObjectFunc *func[MAXIMUM_WAIT_OBJECTS + 1];
6117
    void *opaque[MAXIMUM_WAIT_OBJECTS + 1];
6118
} WaitObjects;
6119

    
6120
static WaitObjects wait_objects = {0};
6121

    
6122
int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
6123
{
6124
    WaitObjects *w = &wait_objects;
6125

    
6126
    if (w->num >= MAXIMUM_WAIT_OBJECTS)
6127
        return -1;
6128
    w->events[w->num] = handle;
6129
    w->func[w->num] = func;
6130
    w->opaque[w->num] = opaque;
6131
    w->num++;
6132
    return 0;
6133
}
6134

    
6135
void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
6136
{
6137
    int i, found;
6138
    WaitObjects *w = &wait_objects;
6139

    
6140
    found = 0;
6141
    for (i = 0; i < w->num; i++) {
6142
        if (w->events[i] == handle)
6143
            found = 1;
6144
        if (found) {
6145
            w->events[i] = w->events[i + 1];
6146
            w->func[i] = w->func[i + 1];
6147
            w->opaque[i] = w->opaque[i + 1];
6148
        }
6149
    }
6150
    if (found)
6151
        w->num--;
6152
}
6153
#endif
6154

    
6155
/***********************************************************/
6156
/* savevm/loadvm support */
6157

    
6158
#define IO_BUF_SIZE 32768
6159

    
6160
struct QEMUFile {
6161
    FILE *outfile;
6162
    BlockDriverState *bs;
6163
    int is_file;
6164
    int is_writable;
6165
    int64_t base_offset;
6166
    int64_t buf_offset; /* start of buffer when writing, end of buffer
6167
                           when reading */
6168
    int buf_index;
6169
    int buf_size; /* 0 when writing */
6170
    uint8_t buf[IO_BUF_SIZE];
6171
};
6172

    
6173
QEMUFile *qemu_fopen(const char *filename, const char *mode)
6174
{
6175
    QEMUFile *f;
6176

    
6177
    f = qemu_mallocz(sizeof(QEMUFile));
6178
    if (!f)
6179
        return NULL;
6180
    if (!strcmp(mode, "wb")) {
6181
        f->is_writable = 1;
6182
    } else if (!strcmp(mode, "rb")) {
6183
        f->is_writable = 0;
6184
    } else {
6185
        goto fail;
6186
    }
6187
    f->outfile = fopen(filename, mode);
6188
    if (!f->outfile)
6189
        goto fail;
6190
    f->is_file = 1;
6191
    return f;
6192
 fail:
6193
    if (f->outfile)
6194
        fclose(f->outfile);
6195
    qemu_free(f);
6196
    return NULL;
6197
}
6198

    
6199
static QEMUFile *qemu_fopen_bdrv(BlockDriverState *bs, int64_t offset, int is_writable)
6200
{
6201
    QEMUFile *f;
6202

    
6203
    f = qemu_mallocz(sizeof(QEMUFile));
6204
    if (!f)
6205
        return NULL;
6206
    f->is_file = 0;
6207
    f->bs = bs;
6208
    f->is_writable = is_writable;
6209
    f->base_offset = offset;
6210
    return f;
6211
}
6212

    
6213
void qemu_fflush(QEMUFile *f)
6214
{
6215
    if (!f->is_writable)
6216
        return;
6217
    if (f->buf_index > 0) {
6218
        if (f->is_file) {
6219
            fseek(f->outfile, f->buf_offset, SEEK_SET);
6220
            fwrite(f->buf, 1, f->buf_index, f->outfile);
6221
        } else {
6222
            bdrv_pwrite(f->bs, f->base_offset + f->buf_offset,
6223
                        f->buf, f->buf_index);
6224
        }
6225
        f->buf_offset += f->buf_index;
6226
        f->buf_index = 0;
6227
    }
6228
}
6229

    
6230
static void qemu_fill_buffer(QEMUFile *f)
6231
{
6232
    int len;
6233

    
6234
    if (f->is_writable)
6235
        return;
6236
    if (f->is_file) {
6237
        fseek(f->outfile, f->buf_offset, SEEK_SET);
6238
        len = fread(f->buf, 1, IO_BUF_SIZE, f->outfile);
6239
        if (len < 0)
6240
            len = 0;
6241
    } else {
6242
        len = bdrv_pread(f->bs, f->base_offset + f->buf_offset,
6243
                         f->buf, IO_BUF_SIZE);
6244
        if (len < 0)
6245
            len = 0;
6246
    }
6247
    f->buf_index = 0;
6248
    f->buf_size = len;
6249
    f->buf_offset += len;
6250
}
6251

    
6252
void qemu_fclose(QEMUFile *f)
6253
{
6254
    if (f->is_writable)
6255
        qemu_fflush(f);
6256
    if (f->is_file) {
6257
        fclose(f->outfile);
6258
    }
6259
    qemu_free(f);
6260
}
6261

    
6262
void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size)
6263
{
6264
    int l;
6265
    while (size > 0) {
6266
        l = IO_BUF_SIZE - f->buf_index;
6267
        if (l > size)
6268
            l = size;
6269
        memcpy(f->buf + f->buf_index, buf, l);
6270
        f->buf_index += l;
6271
        buf += l;
6272
        size -= l;
6273
        if (f->buf_index >= IO_BUF_SIZE)
6274
            qemu_fflush(f);
6275
    }
6276
}
6277

    
6278
void qemu_put_byte(QEMUFile *f, int v)
6279
{
6280
    f->buf[f->buf_index++] = v;
6281
    if (f->buf_index >= IO_BUF_SIZE)
6282
        qemu_fflush(f);
6283
}
6284

    
6285
int qemu_get_buffer(QEMUFile *f, uint8_t *buf, int size1)
6286
{
6287
    int size, l;
6288

    
6289
    size = size1;
6290
    while (size > 0) {
6291
        l = f->buf_size - f->buf_index;
6292
        if (l == 0) {
6293
            qemu_fill_buffer(f);
6294
            l = f->buf_size - f->buf_index;
6295
            if (l == 0)
6296
                break;
6297
        }
6298
        if (l > size)
6299
            l = size;
6300
        memcpy(buf, f->buf + f->buf_index, l);
6301
        f->buf_index += l;
6302
        buf += l;
6303
        size -= l;
6304
    }
6305
    return size1 - size;
6306
}
6307

    
6308
int qemu_get_byte(QEMUFile *f)
6309
{
6310
    if (f->buf_index >= f->buf_size) {
6311
        qemu_fill_buffer(f);
6312
        if (f->buf_index >= f->buf_size)
6313
            return 0;
6314
    }
6315
    return f->buf[f->buf_index++];
6316
}
6317

    
6318
int64_t qemu_ftell(QEMUFile *f)
6319
{
6320
    return f->buf_offset - f->buf_size + f->buf_index;
6321
}
6322

    
6323
int64_t qemu_fseek(QEMUFile *f, int64_t pos, int whence)
6324
{
6325
    if (whence == SEEK_SET) {
6326
        /* nothing to do */
6327
    } else if (whence == SEEK_CUR) {
6328
        pos += qemu_ftell(f);
6329
    } else {
6330
        /* SEEK_END not supported */
6331
        return -1;
6332
    }
6333
    if (f->is_writable) {
6334
        qemu_fflush(f);
6335
        f->buf_offset = pos;
6336
    } else {
6337
        f->buf_offset = pos;
6338
        f->buf_index = 0;
6339
        f->buf_size = 0;
6340
    }
6341
    return pos;
6342
}
6343

    
6344
void qemu_put_be16(QEMUFile *f, unsigned int v)
6345
{
6346
    qemu_put_byte(f, v >> 8);
6347
    qemu_put_byte(f, v);
6348
}
6349

    
6350
void qemu_put_be32(QEMUFile *f, unsigned int v)
6351
{
6352
    qemu_put_byte(f, v >> 24);
6353
    qemu_put_byte(f, v >> 16);
6354
    qemu_put_byte(f, v >> 8);
6355
    qemu_put_byte(f, v);
6356
}
6357

    
6358
void qemu_put_be64(QEMUFile *f, uint64_t v)
6359
{
6360
    qemu_put_be32(f, v >> 32);
6361
    qemu_put_be32(f, v);
6362
}
6363

    
6364
unsigned int qemu_get_be16(QEMUFile *f)
6365
{
6366
    unsigned int v;
6367
    v = qemu_get_byte(f) << 8;
6368
    v |= qemu_get_byte(f);
6369
    return v;
6370
}
6371

    
6372
unsigned int qemu_get_be32(QEMUFile *f)
6373
{
6374
    unsigned int v;
6375
    v = qemu_get_byte(f) << 24;
6376
    v |= qemu_get_byte(f) << 16;
6377
    v |= qemu_get_byte(f) << 8;
6378
    v |= qemu_get_byte(f);
6379
    return v;
6380
}
6381

    
6382
uint64_t qemu_get_be64(QEMUFile *f)
6383
{
6384
    uint64_t v;
6385
    v = (uint64_t)qemu_get_be32(f) << 32;
6386
    v |= qemu_get_be32(f);
6387
    return v;
6388
}
6389

    
6390
typedef struct SaveStateEntry {
6391
    char idstr[256];
6392
    int instance_id;
6393
    int version_id;
6394
    SaveStateHandler *save_state;
6395
    LoadStateHandler *load_state;
6396
    void *opaque;
6397
    struct SaveStateEntry *next;
6398
} SaveStateEntry;
6399

    
6400
static SaveStateEntry *first_se;
6401

    
6402
/* TODO: Individual devices generally have very little idea about the rest
6403
   of the system, so instance_id should be removed/replaced.
6404
   Meanwhile pass -1 as instance_id if you do not already have a clearly
6405
   distinguishing id for all instances of your device class. */
6406
int register_savevm(const char *idstr,
6407
                    int instance_id,
6408
                    int version_id,
6409
                    SaveStateHandler *save_state,
6410
                    LoadStateHandler *load_state,
6411
                    void *opaque)
6412
{
6413
    SaveStateEntry *se, **pse;
6414

    
6415
    se = qemu_malloc(sizeof(SaveStateEntry));
6416
    if (!se)
6417
        return -1;
6418
    pstrcpy(se->idstr, sizeof(se->idstr), idstr);
6419
    se->instance_id = (instance_id == -1) ? 0 : instance_id;
6420
    se->version_id = version_id;
6421
    se->save_state = save_state;
6422
    se->load_state = load_state;
6423
    se->opaque = opaque;
6424
    se->next = NULL;
6425

    
6426
    /* add at the end of list */
6427
    pse = &first_se;
6428
    while (*pse != NULL) {
6429
        if (instance_id == -1
6430
                && strcmp(se->idstr, (*pse)->idstr) == 0
6431
                && se->instance_id <= (*pse)->instance_id)
6432
            se->instance_id = (*pse)->instance_id + 1;
6433
        pse = &(*pse)->next;
6434
    }
6435
    *pse = se;
6436
    return 0;
6437
}
6438

    
6439
#define QEMU_VM_FILE_MAGIC   0x5145564d
6440
#define QEMU_VM_FILE_VERSION 0x00000002
6441

    
6442
static int qemu_savevm_state(QEMUFile *f)
6443
{
6444
    SaveStateEntry *se;
6445
    int len, ret;
6446
    int64_t cur_pos, len_pos, total_len_pos;
6447

    
6448
    qemu_put_be32(f, QEMU_VM_FILE_MAGIC);
6449
    qemu_put_be32(f, QEMU_VM_FILE_VERSION);
6450
    total_len_pos = qemu_ftell(f);
6451
    qemu_put_be64(f, 0); /* total size */
6452

    
6453
    for(se = first_se; se != NULL; se = se->next) {
6454
        if (se->save_state == NULL)
6455
            /* this one has a loader only, for backwards compatibility */
6456
            continue;
6457

    
6458
        /* ID string */
6459
        len = strlen(se->idstr);
6460
        qemu_put_byte(f, len);
6461
        qemu_put_buffer(f, (uint8_t *)se->idstr, len);
6462

    
6463
        qemu_put_be32(f, se->instance_id);
6464
        qemu_put_be32(f, se->version_id);
6465

    
6466
        /* record size: filled later */
6467
        len_pos = qemu_ftell(f);
6468
        qemu_put_be32(f, 0);
6469
        se->save_state(f, se->opaque);
6470

    
6471
        /* fill record size */
6472
        cur_pos = qemu_ftell(f);
6473
        len = cur_pos - len_pos - 4;
6474
        qemu_fseek(f, len_pos, SEEK_SET);
6475
        qemu_put_be32(f, len);
6476
        qemu_fseek(f, cur_pos, SEEK_SET);
6477
    }
6478
    cur_pos = qemu_ftell(f);
6479
    qemu_fseek(f, total_len_pos, SEEK_SET);
6480
    qemu_put_be64(f, cur_pos - total_len_pos - 8);
6481
    qemu_fseek(f, cur_pos, SEEK_SET);
6482

    
6483
    ret = 0;
6484
    return ret;
6485
}
6486

    
6487
static SaveStateEntry *find_se(const char *idstr, int instance_id)
6488
{
6489
    SaveStateEntry *se;
6490

    
6491
    for(se = first_se; se != NULL; se = se->next) {
6492
        if (!strcmp(se->idstr, idstr) &&
6493
            instance_id == se->instance_id)
6494
            return se;
6495
    }
6496
    return NULL;
6497
}
6498

    
6499
static int qemu_loadvm_state(QEMUFile *f)
6500
{
6501
    SaveStateEntry *se;
6502
    int len, ret, instance_id, record_len, version_id;
6503
    int64_t total_len, end_pos, cur_pos;
6504
    unsigned int v;
6505
    char idstr[256];
6506

    
6507
    v = qemu_get_be32(f);
6508
    if (v != QEMU_VM_FILE_MAGIC)
6509
        goto fail;
6510
    v = qemu_get_be32(f);
6511
    if (v != QEMU_VM_FILE_VERSION) {
6512
    fail:
6513
        ret = -1;
6514
        goto the_end;
6515
    }
6516
    total_len = qemu_get_be64(f);
6517
    end_pos = total_len + qemu_ftell(f);
6518
    for(;;) {
6519
        if (qemu_ftell(f) >= end_pos)
6520
            break;
6521
        len = qemu_get_byte(f);
6522
        qemu_get_buffer(f, (uint8_t *)idstr, len);
6523
        idstr[len] = '\0';
6524
        instance_id = qemu_get_be32(f);
6525
        version_id = qemu_get_be32(f);
6526
        record_len = qemu_get_be32(f);
6527
#if 0
6528
        printf("idstr=%s instance=0x%x version=%d len=%d\n",
6529
               idstr, instance_id, version_id, record_len);
6530
#endif
6531
        cur_pos = qemu_ftell(f);
6532
        se = find_se(idstr, instance_id);
6533
        if (!se) {
6534
            fprintf(stderr, "qemu: warning: instance 0x%x of device '%s' not present in current VM\n",
6535
                    instance_id, idstr);
6536
        } else {
6537
            ret = se->load_state(f, se->opaque, version_id);
6538
            if (ret < 0) {
6539
                fprintf(stderr, "qemu: warning: error while loading state for instance 0x%x of device '%s'\n",
6540
                        instance_id, idstr);
6541
            }
6542
        }
6543
        /* always seek to exact end of record */
6544
        qemu_fseek(f, cur_pos + record_len, SEEK_SET);
6545
    }
6546
    ret = 0;
6547
 the_end:
6548
    return ret;
6549
}
6550

    
6551
/* device can contain snapshots */
6552
static int bdrv_can_snapshot(BlockDriverState *bs)
6553
{
6554
    return (bs &&
6555
            !bdrv_is_removable(bs) &&
6556
            !bdrv_is_read_only(bs));
6557
}
6558

    
6559
/* device must be snapshots in order to have a reliable snapshot */
6560
static int bdrv_has_snapshot(BlockDriverState *bs)
6561
{
6562
    return (bs &&
6563
            !bdrv_is_removable(bs) &&
6564
            !bdrv_is_read_only(bs));
6565
}
6566

    
6567
static BlockDriverState *get_bs_snapshots(void)
6568
{
6569
    BlockDriverState *bs;
6570
    int i;
6571

    
6572
    if (bs_snapshots)
6573
        return bs_snapshots;
6574
    for(i = 0; i <= nb_drives; i++) {
6575
        bs = drives_table[i].bdrv;
6576
        if (bdrv_can_snapshot(bs))
6577
            goto ok;
6578
    }
6579
    return NULL;
6580
 ok:
6581
    bs_snapshots = bs;
6582
    return bs;
6583
}
6584

    
6585
static int bdrv_snapshot_find(BlockDriverState *bs, QEMUSnapshotInfo *sn_info,
6586
                              const char *name)
6587
{
6588
    QEMUSnapshotInfo *sn_tab, *sn;
6589
    int nb_sns, i, ret;
6590

    
6591
    ret = -ENOENT;
6592
    nb_sns = bdrv_snapshot_list(bs, &sn_tab);
6593
    if (nb_sns < 0)
6594
        return ret;
6595
    for(i = 0; i < nb_sns; i++) {
6596
        sn = &sn_tab[i];
6597
        if (!strcmp(sn->id_str, name) || !strcmp(sn->name, name)) {
6598
            *sn_info = *sn;
6599
            ret = 0;
6600
            break;
6601
        }
6602
    }
6603
    qemu_free(sn_tab);
6604
    return ret;
6605
}
6606

    
6607
void do_savevm(const char *name)
6608
{
6609
    BlockDriverState *bs, *bs1;
6610
    QEMUSnapshotInfo sn1, *sn = &sn1, old_sn1, *old_sn = &old_sn1;
6611
    int must_delete, ret, i;
6612
    BlockDriverInfo bdi1, *bdi = &bdi1;
6613
    QEMUFile *f;
6614
    int saved_vm_running;
6615
#ifdef _WIN32
6616
    struct _timeb tb;
6617
#else
6618
    struct timeval tv;
6619
#endif
6620

    
6621
    bs = get_bs_snapshots();
6622
    if (!bs) {
6623
        term_printf("No block device can accept snapshots\n");
6624
        return;
6625
    }
6626

    
6627
    /* ??? Should this occur after vm_stop?  */
6628
    qemu_aio_flush();
6629

    
6630
    saved_vm_running = vm_running;
6631
    vm_stop(0);
6632

    
6633
    must_delete = 0;
6634
    if (name) {
6635
        ret = bdrv_snapshot_find(bs, old_sn, name);
6636
        if (ret >= 0) {
6637
            must_delete = 1;
6638
        }
6639
    }
6640
    memset(sn, 0, sizeof(*sn));
6641
    if (must_delete) {
6642
        pstrcpy(sn->name, sizeof(sn->name), old_sn->name);
6643
        pstrcpy(sn->id_str, sizeof(sn->id_str), old_sn->id_str);
6644
    } else {
6645
        if (name)
6646
            pstrcpy(sn->name, sizeof(sn->name), name);
6647
    }
6648

    
6649
    /* fill auxiliary fields */
6650
#ifdef _WIN32
6651
    _ftime(&tb);
6652
    sn->date_sec = tb.time;
6653
    sn->date_nsec = tb.millitm * 1000000;
6654
#else
6655
    gettimeofday(&tv, NULL);
6656
    sn->date_sec = tv.tv_sec;
6657
    sn->date_nsec = tv.tv_usec * 1000;
6658
#endif
6659
    sn->vm_clock_nsec = qemu_get_clock(vm_clock);
6660

    
6661
    if (bdrv_get_info(bs, bdi) < 0 || bdi->vm_state_offset <= 0) {
6662
        term_printf("Device %s does not support VM state snapshots\n",
6663
                    bdrv_get_device_name(bs));
6664
        goto the_end;
6665
    }
6666

    
6667
    /* save the VM state */
6668
    f = qemu_fopen_bdrv(bs, bdi->vm_state_offset, 1);
6669
    if (!f) {
6670
        term_printf("Could not open VM state file\n");
6671
        goto the_end;
6672
    }
6673
    ret = qemu_savevm_state(f);
6674
    sn->vm_state_size = qemu_ftell(f);
6675
    qemu_fclose(f);
6676
    if (ret < 0) {
6677
        term_printf("Error %d while writing VM\n", ret);
6678
        goto the_end;
6679
    }
6680

    
6681
    /* create the snapshots */
6682

    
6683
    for(i = 0; i < nb_drives; i++) {
6684
        bs1 = drives_table[i].bdrv;
6685
        if (bdrv_has_snapshot(bs1)) {
6686
            if (must_delete) {
6687
                ret = bdrv_snapshot_delete(bs1, old_sn->id_str);
6688
                if (ret < 0) {
6689
                    term_printf("Error while deleting snapshot on '%s'\n",
6690
                                bdrv_get_device_name(bs1));
6691
                }
6692
            }
6693
            ret = bdrv_snapshot_create(bs1, sn);
6694
            if (ret < 0) {
6695
                term_printf("Error while creating snapshot on '%s'\n",
6696
                            bdrv_get_device_name(bs1));
6697
            }
6698
        }
6699
    }
6700

    
6701
 the_end:
6702
    if (saved_vm_running)
6703
        vm_start();
6704
}
6705

    
6706
void do_loadvm(const char *name)
6707
{
6708
    BlockDriverState *bs, *bs1;
6709
    BlockDriverInfo bdi1, *bdi = &bdi1;
6710
    QEMUFile *f;
6711
    int i, ret;
6712
    int saved_vm_running;
6713

    
6714
    bs = get_bs_snapshots();
6715
    if (!bs) {
6716
        term_printf("No block device supports snapshots\n");
6717
        return;
6718
    }
6719

    
6720
    /* Flush all IO requests so they don't interfere with the new state.  */
6721
    qemu_aio_flush();
6722

    
6723
    saved_vm_running = vm_running;
6724
    vm_stop(0);
6725

    
6726
    for(i = 0; i <= nb_drives; i++) {
6727
        bs1 = drives_table[i].bdrv;
6728
        if (bdrv_has_snapshot(bs1)) {
6729
            ret = bdrv_snapshot_goto(bs1, name);
6730
            if (ret < 0) {
6731
                if (bs != bs1)
6732
                    term_printf("Warning: ");
6733
                switch(ret) {
6734
                case -ENOTSUP:
6735
                    term_printf("Snapshots not supported on device '%s'\n",
6736
                                bdrv_get_device_name(bs1));
6737
                    break;
6738
                case -ENOENT:
6739
                    term_printf("Could not find snapshot '%s' on device '%s'\n",
6740
                                name, bdrv_get_device_name(bs1));
6741
                    break;
6742
                default:
6743
                    term_printf("Error %d while activating snapshot on '%s'\n",
6744
                                ret, bdrv_get_device_name(bs1));
6745
                    break;
6746
                }
6747
                /* fatal on snapshot block device */
6748
                if (bs == bs1)
6749
                    goto the_end;
6750
            }
6751
        }
6752
    }
6753

    
6754
    if (bdrv_get_info(bs, bdi) < 0 || bdi->vm_state_offset <= 0) {
6755
        term_printf("Device %s does not support VM state snapshots\n",
6756
                    bdrv_get_device_name(bs));
6757
        return;
6758
    }
6759

    
6760
    /* restore the VM state */
6761
    f = qemu_fopen_bdrv(bs, bdi->vm_state_offset, 0);
6762
    if (!f) {
6763
        term_printf("Could not open VM state file\n");
6764
        goto the_end;
6765
    }
6766
    ret = qemu_loadvm_state(f);
6767
    qemu_fclose(f);
6768
    if (ret < 0) {
6769
        term_printf("Error %d while loading VM state\n", ret);
6770
    }
6771
 the_end:
6772
    if (saved_vm_running)
6773
        vm_start();
6774
}
6775

    
6776
void do_delvm(const char *name)
6777
{
6778
    BlockDriverState *bs, *bs1;
6779
    int i, ret;
6780

    
6781
    bs = get_bs_snapshots();
6782
    if (!bs) {
6783
        term_printf("No block device supports snapshots\n");
6784
        return;
6785
    }
6786

    
6787
    for(i = 0; i <= nb_drives; i++) {
6788
        bs1 = drives_table[i].bdrv;
6789
        if (bdrv_has_snapshot(bs1)) {
6790
            ret = bdrv_snapshot_delete(bs1, name);
6791
            if (ret < 0) {
6792
                if (ret == -ENOTSUP)
6793
                    term_printf("Snapshots not supported on device '%s'\n",
6794
                                bdrv_get_device_name(bs1));
6795
                else
6796
                    term_printf("Error %d while deleting snapshot on '%s'\n",
6797
                                ret, bdrv_get_device_name(bs1));
6798
            }
6799
        }
6800
    }
6801
}
6802

    
6803
void do_info_snapshots(void)
6804
{
6805
    BlockDriverState *bs, *bs1;
6806
    QEMUSnapshotInfo *sn_tab, *sn;
6807
    int nb_sns, i;
6808
    char buf[256];
6809

    
6810
    bs = get_bs_snapshots();
6811
    if (!bs) {
6812
        term_printf("No available block device supports snapshots\n");
6813
        return;
6814
    }
6815
    term_printf("Snapshot devices:");
6816
    for(i = 0; i <= nb_drives; i++) {
6817
        bs1 = drives_table[i].bdrv;
6818
        if (bdrv_has_snapshot(bs1)) {
6819
            if (bs == bs1)
6820
                term_printf(" %s", bdrv_get_device_name(bs1));
6821
        }
6822
    }
6823
    term_printf("\n");
6824

    
6825
    nb_sns = bdrv_snapshot_list(bs, &sn_tab);
6826
    if (nb_sns < 0) {
6827
        term_printf("bdrv_snapshot_list: error %d\n", nb_sns);
6828
        return;
6829
    }
6830
    term_printf("Snapshot list (from %s):\n", bdrv_get_device_name(bs));
6831
    term_printf("%s\n", bdrv_snapshot_dump(buf, sizeof(buf), NULL));
6832
    for(i = 0; i < nb_sns; i++) {
6833
        sn = &sn_tab[i];
6834
        term_printf("%s\n", bdrv_snapshot_dump(buf, sizeof(buf), sn));
6835
    }
6836
    qemu_free(sn_tab);
6837
}
6838

    
6839
/***********************************************************/
6840
/* ram save/restore */
6841

    
6842
static int ram_get_page(QEMUFile *f, uint8_t *buf, int len)
6843
{
6844
    int v;
6845

    
6846
    v = qemu_get_byte(f);
6847
    switch(v) {
6848
    case 0:
6849
        if (qemu_get_buffer(f, buf, len) != len)
6850
            return -EIO;
6851
        break;
6852
    case 1:
6853
        v = qemu_get_byte(f);
6854
        memset(buf, v, len);
6855
        break;
6856
    default:
6857
        return -EINVAL;
6858
    }
6859
    return 0;
6860
}
6861

    
6862
static int ram_load_v1(QEMUFile *f, void *opaque)
6863
{
6864
    int ret;
6865
    ram_addr_t i;
6866

    
6867
    if (qemu_get_be32(f) != phys_ram_size)
6868
        return -EINVAL;
6869
    for(i = 0; i < phys_ram_size; i+= TARGET_PAGE_SIZE) {
6870
        ret = ram_get_page(f, phys_ram_base + i, TARGET_PAGE_SIZE);
6871
        if (ret)
6872
            return ret;
6873
    }
6874
    return 0;
6875
}
6876

    
6877
#define BDRV_HASH_BLOCK_SIZE 1024
6878
#define IOBUF_SIZE 4096
6879
#define RAM_CBLOCK_MAGIC 0xfabe
6880

    
6881
typedef struct RamCompressState {
6882
    z_stream zstream;
6883
    QEMUFile *f;
6884
    uint8_t buf[IOBUF_SIZE];
6885
} RamCompressState;
6886

    
6887
static int ram_compress_open(RamCompressState *s, QEMUFile *f)
6888
{
6889
    int ret;
6890
    memset(s, 0, sizeof(*s));
6891
    s->f = f;
6892
    ret = deflateInit2(&s->zstream, 1,
6893
                       Z_DEFLATED, 15,
6894
                       9, Z_DEFAULT_STRATEGY);
6895
    if (ret != Z_OK)
6896
        return -1;
6897
    s->zstream.avail_out = IOBUF_SIZE;
6898
    s->zstream.next_out = s->buf;
6899
    return 0;
6900
}
6901

    
6902
static void ram_put_cblock(RamCompressState *s, const uint8_t *buf, int len)
6903
{
6904
    qemu_put_be16(s->f, RAM_CBLOCK_MAGIC);
6905
    qemu_put_be16(s->f, len);
6906
    qemu_put_buffer(s->f, buf, len);
6907
}
6908

    
6909
static int ram_compress_buf(RamCompressState *s, const uint8_t *buf, int len)
6910
{
6911
    int ret;
6912

    
6913
    s->zstream.avail_in = len;
6914
    s->zstream.next_in = (uint8_t *)buf;
6915
    while (s->zstream.avail_in > 0) {
6916
        ret = deflate(&s->zstream, Z_NO_FLUSH);
6917
        if (ret != Z_OK)
6918
            return -1;
6919
        if (s->zstream.avail_out == 0) {
6920
            ram_put_cblock(s, s->buf, IOBUF_SIZE);
6921
            s->zstream.avail_out = IOBUF_SIZE;
6922
            s->zstream.next_out = s->buf;
6923
        }
6924
    }
6925
    return 0;
6926
}
6927

    
6928
static void ram_compress_close(RamCompressState *s)
6929
{
6930
    int len, ret;
6931

    
6932
    /* compress last bytes */
6933
    for(;;) {
6934
        ret = deflate(&s->zstream, Z_FINISH);
6935
        if (ret == Z_OK || ret == Z_STREAM_END) {
6936
            len = IOBUF_SIZE - s->zstream.avail_out;
6937
            if (len > 0) {
6938
                ram_put_cblock(s, s->buf, len);
6939
            }
6940
            s->zstream.avail_out = IOBUF_SIZE;
6941
            s->zstream.next_out = s->buf;
6942
            if (ret == Z_STREAM_END)
6943
                break;
6944
        } else {
6945
            goto fail;
6946
        }
6947
    }
6948
fail:
6949
    deflateEnd(&s->zstream);
6950
}
6951

    
6952
typedef struct RamDecompressState {
6953
    z_stream zstream;
6954
    QEMUFile *f;
6955
    uint8_t buf[IOBUF_SIZE];
6956
} RamDecompressState;
6957

    
6958
static int ram_decompress_open(RamDecompressState *s, QEMUFile *f)
6959
{
6960
    int ret;
6961
    memset(s, 0, sizeof(*s));
6962
    s->f = f;
6963
    ret = inflateInit(&s->zstream);
6964
    if (ret != Z_OK)
6965
        return -1;
6966
    return 0;
6967
}
6968

    
6969
static int ram_decompress_buf(RamDecompressState *s, uint8_t *buf, int len)
6970
{
6971
    int ret, clen;
6972

    
6973
    s->zstream.avail_out = len;
6974
    s->zstream.next_out = buf;
6975
    while (s->zstream.avail_out > 0) {
6976
        if (s->zstream.avail_in == 0) {
6977
            if (qemu_get_be16(s->f) != RAM_CBLOCK_MAGIC)
6978
                return -1;
6979
            clen = qemu_get_be16(s->f);
6980
            if (clen > IOBUF_SIZE)
6981
                return -1;
6982
            qemu_get_buffer(s->f, s->buf, clen);
6983
            s->zstream.avail_in = clen;
6984
            s->zstream.next_in = s->buf;
6985
        }
6986
        ret = inflate(&s->zstream, Z_PARTIAL_FLUSH);
6987
        if (ret != Z_OK && ret != Z_STREAM_END) {
6988
            return -1;
6989
        }
6990
    }
6991
    return 0;
6992
}
6993

    
6994
static void ram_decompress_close(RamDecompressState *s)
6995
{
6996
    inflateEnd(&s->zstream);
6997
}
6998

    
6999
static void ram_save(QEMUFile *f, void *opaque)
7000
{
7001
    ram_addr_t i;
7002
    RamCompressState s1, *s = &s1;
7003
    uint8_t buf[10];
7004

    
7005
    qemu_put_be32(f, phys_ram_size);
7006
    if (ram_compress_open(s, f) < 0)
7007
        return;
7008
    for(i = 0; i < phys_ram_size; i+= BDRV_HASH_BLOCK_SIZE) {
7009
#if 0
7010
        if (tight_savevm_enabled) {
7011
            int64_t sector_num;
7012
            int j;
7013

7014
            /* find if the memory block is available on a virtual
7015
               block device */
7016
            sector_num = -1;
7017
            for(j = 0; j < nb_drives; j++) {
7018
                sector_num = bdrv_hash_find(drives_table[j].bdrv,
7019
                                            phys_ram_base + i,
7020
                                            BDRV_HASH_BLOCK_SIZE);
7021
                if (sector_num >= 0)
7022
                    break;
7023
            }
7024
            if (j == nb_drives)
7025
                goto normal_compress;
7026
            buf[0] = 1;
7027
            buf[1] = j;
7028
            cpu_to_be64wu((uint64_t *)(buf + 2), sector_num);
7029
            ram_compress_buf(s, buf, 10);
7030
        } else
7031
#endif
7032
        {
7033
            //        normal_compress:
7034
            buf[0] = 0;
7035
            ram_compress_buf(s, buf, 1);
7036
            ram_compress_buf(s, phys_ram_base + i, BDRV_HASH_BLOCK_SIZE);
7037
        }
7038
    }
7039
    ram_compress_close(s);
7040
}
7041

    
7042
static int ram_load(QEMUFile *f, void *opaque, int version_id)
7043
{
7044
    RamDecompressState s1, *s = &s1;
7045
    uint8_t buf[10];
7046
    ram_addr_t i;
7047

    
7048
    if (version_id == 1)
7049
        return ram_load_v1(f, opaque);
7050
    if (version_id != 2)
7051
        return -EINVAL;
7052
    if (qemu_get_be32(f) != phys_ram_size)
7053
        return -EINVAL;
7054
    if (ram_decompress_open(s, f) < 0)
7055
        return -EINVAL;
7056
    for(i = 0; i < phys_ram_size; i+= BDRV_HASH_BLOCK_SIZE) {
7057
        if (ram_decompress_buf(s, buf, 1) < 0) {
7058
            fprintf(stderr, "Error while reading ram block header\n");
7059
            goto error;
7060
        }
7061
        if (buf[0] == 0) {
7062
            if (ram_decompress_buf(s, phys_ram_base + i, BDRV_HASH_BLOCK_SIZE) < 0) {
7063
                fprintf(stderr, "Error while reading ram block address=0x%08" PRIx64, (uint64_t)i);
7064
                goto error;
7065
            }
7066
        } else
7067
#if 0
7068
        if (buf[0] == 1) {
7069
            int bs_index;
7070
            int64_t sector_num;
7071

7072
            ram_decompress_buf(s, buf + 1, 9);
7073
            bs_index = buf[1];
7074
            sector_num = be64_to_cpupu((const uint64_t *)(buf + 2));
7075
            if (bs_index >= nb_drives) {
7076
                fprintf(stderr, "Invalid block device index %d\n", bs_index);
7077
                goto error;
7078
            }
7079
            if (bdrv_read(drives_table[bs_index].bdrv, sector_num,
7080
                          phys_ram_base + i,
7081
                          BDRV_HASH_BLOCK_SIZE / 512) < 0) {
7082
                fprintf(stderr, "Error while reading sector %d:%" PRId64 "\n",
7083
                        bs_index, sector_num);
7084
                goto error;
7085
            }
7086
        } else
7087
#endif
7088
        {
7089
        error:
7090
            printf("Error block header\n");
7091
            return -EINVAL;
7092
        }
7093
    }
7094
    ram_decompress_close(s);
7095
    return 0;
7096
}
7097

    
7098
/***********************************************************/
7099
/* bottom halves (can be seen as timers which expire ASAP) */
7100

    
7101
struct QEMUBH {
7102
    QEMUBHFunc *cb;
7103
    void *opaque;
7104
    int scheduled;
7105
    QEMUBH *next;
7106
};
7107

    
7108
static QEMUBH *first_bh = NULL;
7109

    
7110
QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque)
7111
{
7112
    QEMUBH *bh;
7113
    bh = qemu_mallocz(sizeof(QEMUBH));
7114
    if (!bh)
7115
        return NULL;
7116
    bh->cb = cb;
7117
    bh->opaque = opaque;
7118
    return bh;
7119
}
7120

    
7121
int qemu_bh_poll(void)
7122
{
7123
    QEMUBH *bh, **pbh;
7124
    int ret;
7125

    
7126
    ret = 0;
7127
    for(;;) {
7128
        pbh = &first_bh;
7129
        bh = *pbh;
7130
        if (!bh)
7131
            break;
7132
        ret = 1;
7133
        *pbh = bh->next;
7134
        bh->scheduled = 0;
7135
        bh->cb(bh->opaque);
7136
    }
7137
    return ret;
7138
}
7139

    
7140
void qemu_bh_schedule(QEMUBH *bh)
7141
{
7142
    CPUState *env = cpu_single_env;
7143
    if (bh->scheduled)
7144
        return;
7145
    bh->scheduled = 1;
7146
    bh->next = first_bh;
7147
    first_bh = bh;
7148

    
7149
    /* stop the currently executing CPU to execute the BH ASAP */
7150
    if (env) {
7151
        cpu_interrupt(env, CPU_INTERRUPT_EXIT);
7152
    }
7153
}
7154

    
7155
void qemu_bh_cancel(QEMUBH *bh)
7156
{
7157
    QEMUBH **pbh;
7158
    if (bh->scheduled) {
7159
        pbh = &first_bh;
7160
        while (*pbh != bh)
7161
            pbh = &(*pbh)->next;
7162
        *pbh = bh->next;
7163
        bh->scheduled = 0;
7164
    }
7165
}
7166

    
7167
void qemu_bh_delete(QEMUBH *bh)
7168
{
7169
    qemu_bh_cancel(bh);
7170
    qemu_free(bh);
7171
}
7172

    
7173
/***********************************************************/
7174
/* machine registration */
7175

    
7176
QEMUMachine *first_machine = NULL;
7177

    
7178
int qemu_register_machine(QEMUMachine *m)
7179
{
7180
    QEMUMachine **pm;
7181
    pm = &first_machine;
7182
    while (*pm != NULL)
7183
        pm = &(*pm)->next;
7184
    m->next = NULL;
7185
    *pm = m;
7186
    return 0;
7187
}
7188

    
7189
static QEMUMachine *find_machine(const char *name)
7190
{
7191
    QEMUMachine *m;
7192

    
7193
    for(m = first_machine; m != NULL; m = m->next) {
7194
        if (!strcmp(m->name, name))
7195
            return m;
7196
    }
7197
    return NULL;
7198
}
7199

    
7200
/***********************************************************/
7201
/* main execution loop */
7202

    
7203
static void gui_update(void *opaque)
7204
{
7205
    DisplayState *ds = opaque;
7206
    ds->dpy_refresh(ds);
7207
    qemu_mod_timer(ds->gui_timer,
7208
        (ds->gui_timer_interval ?
7209
            ds->gui_timer_interval :
7210
            GUI_REFRESH_INTERVAL)
7211
        + qemu_get_clock(rt_clock));
7212
}
7213

    
7214
struct vm_change_state_entry {
7215
    VMChangeStateHandler *cb;
7216
    void *opaque;
7217
    LIST_ENTRY (vm_change_state_entry) entries;
7218
};
7219

    
7220
static LIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
7221

    
7222
VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
7223
                                                     void *opaque)
7224
{
7225
    VMChangeStateEntry *e;
7226

    
7227
    e = qemu_mallocz(sizeof (*e));
7228
    if (!e)
7229
        return NULL;
7230

    
7231
    e->cb = cb;
7232
    e->opaque = opaque;
7233
    LIST_INSERT_HEAD(&vm_change_state_head, e, entries);
7234
    return e;
7235
}
7236

    
7237
void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
7238
{
7239
    LIST_REMOVE (e, entries);
7240
    qemu_free (e);
7241
}
7242

    
7243
static void vm_state_notify(int running)
7244
{
7245
    VMChangeStateEntry *e;
7246

    
7247
    for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) {
7248
        e->cb(e->opaque, running);
7249
    }
7250
}
7251

    
7252
/* XXX: support several handlers */
7253
static VMStopHandler *vm_stop_cb;
7254
static void *vm_stop_opaque;
7255

    
7256
int qemu_add_vm_stop_handler(VMStopHandler *cb, void *opaque)
7257
{
7258
    vm_stop_cb = cb;
7259
    vm_stop_opaque = opaque;
7260
    return 0;
7261
}
7262

    
7263
void qemu_del_vm_stop_handler(VMStopHandler *cb, void *opaque)
7264
{
7265
    vm_stop_cb = NULL;
7266
}
7267

    
7268
void vm_start(void)
7269
{
7270
    if (!vm_running) {
7271
        cpu_enable_ticks();
7272
        vm_running = 1;
7273
        vm_state_notify(1);
7274
        qemu_rearm_alarm_timer(alarm_timer);
7275
    }
7276
}
7277

    
7278
void vm_stop(int reason)
7279
{
7280
    if (vm_running) {
7281
        cpu_disable_ticks();
7282
        vm_running = 0;
7283
        if (reason != 0) {
7284
            if (vm_stop_cb) {
7285
                vm_stop_cb(vm_stop_opaque, reason);
7286
            }
7287
        }
7288
        vm_state_notify(0);
7289
    }
7290
}
7291

    
7292
/* reset/shutdown handler */
7293

    
7294
typedef struct QEMUResetEntry {
7295
    QEMUResetHandler *func;
7296
    void *opaque;
7297
    struct QEMUResetEntry *next;
7298
} QEMUResetEntry;
7299

    
7300
static QEMUResetEntry *first_reset_entry;
7301
static int reset_requested;
7302
static int shutdown_requested;
7303
static int powerdown_requested;
7304

    
7305
int qemu_shutdown_requested(void)
7306
{
7307
    int r = shutdown_requested;
7308
    shutdown_requested = 0;
7309
    return r;
7310
}
7311

    
7312
int qemu_reset_requested(void)
7313
{
7314
    int r = reset_requested;
7315
    reset_requested = 0;
7316
    return r;
7317
}
7318

    
7319
int qemu_powerdown_requested(void)
7320
{
7321
    int r = powerdown_requested;
7322
    powerdown_requested = 0;
7323
    return r;
7324
}
7325

    
7326
void qemu_register_reset(QEMUResetHandler *func, void *opaque)
7327
{
7328
    QEMUResetEntry **pre, *re;
7329

    
7330
    pre = &first_reset_entry;
7331
    while (*pre != NULL)
7332
        pre = &(*pre)->next;
7333
    re = qemu_mallocz(sizeof(QEMUResetEntry));
7334
    re->func = func;
7335
    re->opaque = opaque;
7336
    re->next = NULL;
7337
    *pre = re;
7338
}
7339

    
7340
void qemu_system_reset(void)
7341
{
7342
    QEMUResetEntry *re;
7343

    
7344
    /* reset all devices */
7345
    for(re = first_reset_entry; re != NULL; re = re->next) {
7346
        re->func(re->opaque);
7347
    }
7348
}
7349

    
7350
void qemu_system_reset_request(void)
7351
{
7352
    if (no_reboot) {
7353
        shutdown_requested = 1;
7354
    } else {
7355
        reset_requested = 1;
7356
    }
7357
    if (cpu_single_env)
7358
        cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
7359
}
7360

    
7361
void qemu_system_shutdown_request(void)
7362
{
7363
    shutdown_requested = 1;
7364
    if (cpu_single_env)
7365
        cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
7366
}
7367

    
7368
void qemu_system_powerdown_request(void)
7369
{
7370
    powerdown_requested = 1;
7371
    if (cpu_single_env)
7372
        cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
7373
}
7374

    
7375
void main_loop_wait(int timeout)
7376
{
7377
    IOHandlerRecord *ioh;
7378
    fd_set rfds, wfds, xfds;
7379
    int ret, nfds;
7380
#ifdef _WIN32
7381
    int ret2, i;
7382
#endif
7383
    struct timeval tv;
7384
    PollingEntry *pe;
7385

    
7386

    
7387
    /* XXX: need to suppress polling by better using win32 events */
7388
    ret = 0;
7389
    for(pe = first_polling_entry; pe != NULL; pe = pe->next) {
7390
        ret |= pe->func(pe->opaque);
7391
    }
7392
#ifdef _WIN32
7393
    if (ret == 0) {
7394
        int err;
7395
        WaitObjects *w = &wait_objects;
7396

    
7397
        ret = WaitForMultipleObjects(w->num, w->events, FALSE, timeout);
7398
        if (WAIT_OBJECT_0 + 0 <= ret && ret <= WAIT_OBJECT_0 + w->num - 1) {
7399
            if (w->func[ret - WAIT_OBJECT_0])
7400
                w->func[ret - WAIT_OBJECT_0](w->opaque[ret - WAIT_OBJECT_0]);
7401

    
7402
            /* Check for additional signaled events */
7403
            for(i = (ret - WAIT_OBJECT_0 + 1); i < w->num; i++) {
7404

    
7405
                /* Check if event is signaled */
7406
                ret2 = WaitForSingleObject(w->events[i], 0);
7407
                if(ret2 == WAIT_OBJECT_0) {
7408
                    if (w->func[i])
7409
                        w->func[i](w->opaque[i]);
7410
                } else if (ret2 == WAIT_TIMEOUT) {
7411
                } else {
7412
                    err = GetLastError();
7413
                    fprintf(stderr, "WaitForSingleObject error %d %d\n", i, err);
7414
                }
7415
            }
7416
        } else if (ret == WAIT_TIMEOUT) {
7417
        } else {
7418
            err = GetLastError();
7419
            fprintf(stderr, "WaitForMultipleObjects error %d %d\n", ret, err);
7420
        }
7421
    }
7422
#endif
7423
    /* poll any events */
7424
    /* XXX: separate device handlers from system ones */
7425
    nfds = -1;
7426
    FD_ZERO(&rfds);
7427
    FD_ZERO(&wfds);
7428
    FD_ZERO(&xfds);
7429
    for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
7430
        if (ioh->deleted)
7431
            continue;
7432
        if (ioh->fd_read &&
7433
            (!ioh->fd_read_poll ||
7434
             ioh->fd_read_poll(ioh->opaque) != 0)) {
7435
            FD_SET(ioh->fd, &rfds);
7436
            if (ioh->fd > nfds)
7437
                nfds = ioh->fd;
7438
        }
7439
        if (ioh->fd_write) {
7440
            FD_SET(ioh->fd, &wfds);
7441
            if (ioh->fd > nfds)
7442
                nfds = ioh->fd;
7443
        }
7444
    }
7445

    
7446
    tv.tv_sec = 0;
7447
#ifdef _WIN32
7448
    tv.tv_usec = 0;
7449
#else
7450
    tv.tv_usec = timeout * 1000;
7451
#endif
7452
#if defined(CONFIG_SLIRP)
7453
    if (slirp_inited) {
7454
        slirp_select_fill(&nfds, &rfds, &wfds, &xfds);
7455
    }
7456
#endif
7457
    ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv);
7458
    if (ret > 0) {
7459
        IOHandlerRecord **pioh;
7460

    
7461
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
7462
            if (!ioh->deleted && ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
7463
                ioh->fd_read(ioh->opaque);
7464
            }
7465
            if (!ioh->deleted && ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
7466
                ioh->fd_write(ioh->opaque);
7467
            }
7468
        }
7469

    
7470
        /* remove deleted IO handlers */
7471
        pioh = &first_io_handler;
7472
        while (*pioh) {
7473
            ioh = *pioh;
7474
            if (ioh->deleted) {
7475
                *pioh = ioh->next;
7476
                qemu_free(ioh);
7477
            } else
7478
                pioh = &ioh->next;
7479
        }
7480
    }
7481
#if defined(CONFIG_SLIRP)
7482
    if (slirp_inited) {
7483
        if (ret < 0) {
7484
            FD_ZERO(&rfds);
7485
            FD_ZERO(&wfds);
7486
            FD_ZERO(&xfds);
7487
        }
7488
        slirp_select_poll(&rfds, &wfds, &xfds);
7489
    }
7490
#endif
7491

    
7492
    if (vm_running) {
7493
        if (likely(!(cur_cpu->singlestep_enabled & SSTEP_NOTIMER)))
7494
        qemu_run_timers(&active_timers[QEMU_TIMER_VIRTUAL],
7495
                        qemu_get_clock(vm_clock));
7496
        /* run dma transfers, if any */
7497
        DMA_run();
7498
    }
7499

    
7500
    /* real time timers */
7501
    qemu_run_timers(&active_timers[QEMU_TIMER_REALTIME],
7502
                    qemu_get_clock(rt_clock));
7503

    
7504
    if (alarm_timer->flags & ALARM_FLAG_EXPIRED) {
7505
        alarm_timer->flags &= ~(ALARM_FLAG_EXPIRED);
7506
        qemu_rearm_alarm_timer(alarm_timer);
7507
    }
7508

    
7509
    /* Check bottom-halves last in case any of the earlier events triggered
7510
       them.  */
7511
    qemu_bh_poll();
7512

    
7513
}
7514

    
7515
static int main_loop(void)
7516
{
7517
    int ret, timeout;
7518
#ifdef CONFIG_PROFILER
7519
    int64_t ti;
7520
#endif
7521
    CPUState *env;
7522

    
7523
    cur_cpu = first_cpu;
7524
    next_cpu = cur_cpu->next_cpu ?: first_cpu;
7525
    for(;;) {
7526
        if (vm_running) {
7527

    
7528
            for(;;) {
7529
                /* get next cpu */
7530
                env = next_cpu;
7531
#ifdef CONFIG_PROFILER
7532
                ti = profile_getclock();
7533
#endif
7534
                if (use_icount) {
7535
                    int64_t count;
7536
                    int decr;
7537
                    qemu_icount -= (env->icount_decr.u16.low + env->icount_extra);
7538
                    env->icount_decr.u16.low = 0;
7539
                    env->icount_extra = 0;
7540
                    count = qemu_next_deadline();
7541
                    count = (count + (1 << icount_time_shift) - 1)
7542
                            >> icount_time_shift;
7543
                    qemu_icount += count;
7544
                    decr = (count > 0xffff) ? 0xffff : count;
7545
                    count -= decr;
7546
                    env->icount_decr.u16.low = decr;
7547
                    env->icount_extra = count;
7548
                }
7549
                ret = cpu_exec(env);
7550
#ifdef CONFIG_PROFILER
7551
                qemu_time += profile_getclock() - ti;
7552
#endif
7553
                if (use_icount) {
7554
                    /* Fold pending instructions back into the
7555
                       instruction counter, and clear the interrupt flag.  */
7556
                    qemu_icount -= (env->icount_decr.u16.low
7557
                                    + env->icount_extra);
7558
                    env->icount_decr.u32 = 0;
7559
                    env->icount_extra = 0;
7560
                }
7561
                next_cpu = env->next_cpu ?: first_cpu;
7562
                if (event_pending && likely(ret != EXCP_DEBUG)) {
7563
                    ret = EXCP_INTERRUPT;
7564
                    event_pending = 0;
7565
                    break;
7566
                }
7567
                if (ret == EXCP_HLT) {
7568
                    /* Give the next CPU a chance to run.  */
7569
                    cur_cpu = env;
7570
                    continue;
7571
                }
7572
                if (ret != EXCP_HALTED)
7573
                    break;
7574
                /* all CPUs are halted ? */
7575
                if (env == cur_cpu)
7576
                    break;
7577
            }
7578
            cur_cpu = env;
7579

    
7580
            if (shutdown_requested) {
7581
                ret = EXCP_INTERRUPT;
7582
                if (no_shutdown) {
7583
                    vm_stop(0);
7584
                    no_shutdown = 0;
7585
                }
7586
                else
7587
                    break;
7588
            }
7589
            if (reset_requested) {
7590
                reset_requested = 0;
7591
                qemu_system_reset();
7592
                ret = EXCP_INTERRUPT;
7593
            }
7594
            if (powerdown_requested) {
7595
                powerdown_requested = 0;
7596
                qemu_system_powerdown();
7597
                ret = EXCP_INTERRUPT;
7598
            }
7599
            if (unlikely(ret == EXCP_DEBUG)) {
7600
                vm_stop(EXCP_DEBUG);
7601
            }
7602
            /* If all cpus are halted then wait until the next IRQ */
7603
            /* XXX: use timeout computed from timers */
7604
            if (ret == EXCP_HALTED) {
7605
                if (use_icount) {
7606
                    int64_t add;
7607
                    int64_t delta;
7608
                    /* Advance virtual time to the next event.  */
7609
                    if (use_icount == 1) {
7610
                        /* When not using an adaptive execution frequency
7611
                           we tend to get badly out of sync with real time,
7612
                           so just delay for a reasonable amount of time.  */
7613
                        delta = 0;
7614
                    } else {
7615
                        delta = cpu_get_icount() - cpu_get_clock();
7616
                    }
7617
                    if (delta > 0) {
7618
                        /* If virtual time is ahead of real time then just
7619
                           wait for IO.  */
7620
                        timeout = (delta / 1000000) + 1;
7621
                    } else {
7622
                        /* Wait for either IO to occur or the next
7623
                           timer event.  */
7624
                        add = qemu_next_deadline();
7625
                        /* We advance the timer before checking for IO.
7626
                           Limit the amount we advance so that early IO
7627
                           activity won't get the guest too far ahead.  */
7628
                        if (add > 10000000)
7629
                            add = 10000000;
7630
                        delta += add;
7631
                        add = (add + (1 << icount_time_shift) - 1)
7632
                              >> icount_time_shift;
7633
                        qemu_icount += add;
7634
                        timeout = delta / 1000000;
7635
                        if (timeout < 0)
7636
                            timeout = 0;
7637
                    }
7638
                } else {
7639
                    timeout = 10;
7640
                }
7641
            } else {
7642
                timeout = 0;
7643
            }
7644
        } else {
7645
            if (shutdown_requested)
7646
                break;
7647
            timeout = 10;
7648
        }
7649
#ifdef CONFIG_PROFILER
7650
        ti = profile_getclock();
7651
#endif
7652
        main_loop_wait(timeout);
7653
#ifdef CONFIG_PROFILER
7654
        dev_time += profile_getclock() - ti;
7655
#endif
7656
    }
7657
    cpu_disable_ticks();
7658
    return ret;
7659
}
7660

    
7661
static void help(int exitcode)
7662
{
7663
    printf("QEMU PC emulator version " QEMU_VERSION ", Copyright (c) 2003-2008 Fabrice Bellard\n"
7664
           "usage: %s [options] [disk_image]\n"
7665
           "\n"
7666
           "'disk_image' is a raw hard image image for IDE hard disk 0\n"
7667
           "\n"
7668
           "Standard options:\n"
7669
           "-M machine      select emulated machine (-M ? for list)\n"
7670
           "-cpu cpu        select CPU (-cpu ? for list)\n"
7671
           "-fda/-fdb file  use 'file' as floppy disk 0/1 image\n"
7672
           "-hda/-hdb file  use 'file' as IDE hard disk 0/1 image\n"
7673
           "-hdc/-hdd file  use 'file' as IDE hard disk 2/3 image\n"
7674
           "-cdrom file     use 'file' as IDE cdrom image (cdrom is ide1 master)\n"
7675
           "-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]\n"
7676
           "       [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]\n"
7677
           "       [,cache=on|off][,format=f]\n"
7678
           "                use 'file' as a drive image\n"
7679
           "-mtdblock file  use 'file' as on-board Flash memory image\n"
7680
           "-sd file        use 'file' as SecureDigital card image\n"
7681
           "-pflash file    use 'file' as a parallel flash image\n"
7682
           "-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n)\n"
7683
           "-snapshot       write to temporary files instead of disk image files\n"
7684
#ifdef CONFIG_SDL
7685
           "-no-frame       open SDL window without a frame and window decorations\n"
7686
           "-alt-grab       use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt)\n"
7687
           "-no-quit        disable SDL window close capability\n"
7688
#endif
7689
#ifdef TARGET_I386
7690
           "-no-fd-bootchk  disable boot signature checking for floppy disks\n"
7691
#endif
7692
           "-m megs         set virtual RAM size to megs MB [default=%d]\n"
7693
           "-smp n          set the number of CPUs to 'n' [default=1]\n"
7694
           "-nographic      disable graphical output and redirect serial I/Os to console\n"
7695
           "-portrait       rotate graphical output 90 deg left (only PXA LCD)\n"
7696
#ifndef _WIN32
7697
           "-k language     use keyboard layout (for example \"fr\" for French)\n"
7698
#endif
7699
#ifdef HAS_AUDIO
7700
           "-audio-help     print list of audio drivers and their options\n"
7701
           "-soundhw c1,... enable audio support\n"
7702
           "                and only specified sound cards (comma separated list)\n"
7703
           "                use -soundhw ? to get the list of supported cards\n"
7704
           "                use -soundhw all to enable all of them\n"
7705
#endif
7706
           "-localtime      set the real time clock to local time [default=utc]\n"
7707
           "-full-screen    start in full screen\n"
7708
#ifdef TARGET_I386
7709
           "-win2k-hack     use it when installing Windows 2000 to avoid a disk full bug\n"
7710
#endif
7711
           "-usb            enable the USB driver (will be the default soon)\n"
7712
           "-usbdevice name add the host or guest USB device 'name'\n"
7713
#if defined(TARGET_PPC) || defined(TARGET_SPARC)
7714
           "-g WxH[xDEPTH]  Set the initial graphical resolution and depth\n"
7715
#endif
7716
           "-name string    set the name of the guest\n"
7717
           "\n"
7718
           "Network options:\n"
7719
           "-net nic[,vlan=n][,macaddr=addr][,model=type]\n"
7720
           "                create a new Network Interface Card and connect it to VLAN 'n'\n"
7721
#ifdef CONFIG_SLIRP
7722
           "-net user[,vlan=n][,hostname=host]\n"
7723
           "                connect the user mode network stack to VLAN 'n' and send\n"
7724
           "                hostname 'host' to DHCP clients\n"
7725
#endif
7726
#ifdef _WIN32
7727
           "-net tap[,vlan=n],ifname=name\n"
7728
           "                connect the host TAP network interface to VLAN 'n'\n"
7729
#else
7730
           "-net tap[,vlan=n][,fd=h][,ifname=name][,script=file][,downscript=dfile]\n"
7731
           "                connect the host TAP network interface to VLAN 'n' and use the\n"
7732
           "                network scripts 'file' (default=%s)\n"
7733
           "                and 'dfile' (default=%s);\n"
7734
           "                use '[down]script=no' to disable script execution;\n"
7735
           "                use 'fd=h' to connect to an already opened TAP interface\n"
7736
#endif
7737
           "-net socket[,vlan=n][,fd=h][,listen=[host]:port][,connect=host:port]\n"
7738
           "                connect the vlan 'n' to another VLAN using a socket connection\n"
7739
           "-net socket[,vlan=n][,fd=h][,mcast=maddr:port]\n"
7740
           "                connect the vlan 'n' to multicast maddr and port\n"
7741
#ifdef CONFIG_VDE
7742
           "-net vde[,vlan=n][,sock=socketpath][,port=n][,group=groupname][,mode=octalmode]\n"
7743
           "                connect the vlan 'n' to port 'n' of a vde switch running\n"
7744
           "                on host and listening for incoming connections on 'socketpath'.\n"
7745
           "                Use group 'groupname' and mode 'octalmode' to change default\n"
7746
           "                ownership and permissions for communication port.\n"
7747
#endif
7748
           "-net none       use it alone to have zero network devices; if no -net option\n"
7749
           "                is provided, the default is '-net nic -net user'\n"
7750
           "\n"
7751
#ifdef CONFIG_SLIRP
7752
           "-tftp dir       allow tftp access to files in dir [-net user]\n"
7753
           "-bootp file     advertise file in BOOTP replies\n"
7754
#ifndef _WIN32
7755
           "-smb dir        allow SMB access to files in 'dir' [-net user]\n"
7756
#endif
7757
           "-redir [tcp|udp]:host-port:[guest-host]:guest-port\n"
7758
           "                redirect TCP or UDP connections from host to guest [-net user]\n"
7759
#endif
7760
           "\n"
7761
           "Linux boot specific:\n"
7762
           "-kernel bzImage use 'bzImage' as kernel image\n"
7763
           "-append cmdline use 'cmdline' as kernel command line\n"
7764
           "-initrd file    use 'file' as initial ram disk\n"
7765
           "\n"
7766
           "Debug/Expert options:\n"
7767
           "-monitor dev    redirect the monitor to char device 'dev'\n"
7768
           "-serial dev     redirect the serial port to char device 'dev'\n"
7769
           "-parallel dev   redirect the parallel port to char device 'dev'\n"
7770
           "-pidfile file   Write PID to 'file'\n"
7771
           "-S              freeze CPU at startup (use 'c' to start execution)\n"
7772
           "-s              wait gdb connection to port\n"
7773
           "-p port         set gdb connection port [default=%s]\n"
7774
           "-d item1,...    output log to %s (use -d ? for a list of log items)\n"
7775
           "-hdachs c,h,s[,t]  force hard disk 0 physical geometry and the optional BIOS\n"
7776
           "                translation (t=none or lba) (usually qemu can guess them)\n"
7777
           "-L path         set the directory for the BIOS, VGA BIOS and keymaps\n"
7778
#ifdef USE_KQEMU
7779
           "-kernel-kqemu   enable KQEMU full virtualization (default is user mode only)\n"
7780
           "-no-kqemu       disable KQEMU kernel module usage\n"
7781
#endif
7782
#ifdef TARGET_I386
7783
           "-std-vga        simulate a standard VGA card with VESA Bochs Extensions\n"
7784
           "                (default is CL-GD5446 PCI VGA)\n"
7785
           "-no-acpi        disable ACPI\n"
7786
#endif
7787
#ifdef CONFIG_CURSES
7788
           "-curses         use a curses/ncurses interface instead of SDL\n"
7789
#endif
7790
           "-no-reboot      exit instead of rebooting\n"
7791
           "-no-shutdown    stop before shutdown\n"
7792
           "-loadvm [tag|id]  start right away with a saved state (loadvm in monitor)\n"
7793
           "-vnc display    start a VNC server on display\n"
7794
#ifndef _WIN32
7795
           "-daemonize      daemonize QEMU after initializing\n"
7796
#endif
7797
           "-option-rom rom load a file, rom, into the option ROM space\n"
7798
#ifdef TARGET_SPARC
7799
           "-prom-env variable=value  set OpenBIOS nvram variables\n"
7800
#endif
7801
           "-clock          force the use of the given methods for timer alarm.\n"
7802
           "                To see what timers are available use -clock ?\n"
7803
           "-startdate      select initial date of the clock\n"
7804
           "-icount [N|auto]\n"
7805
           "                Enable virtual instruction counter with 2^N clock ticks per instruction\n"
7806
           "\n"
7807
           "During emulation, the following keys are useful:\n"
7808
           "ctrl-alt-f      toggle full screen\n"
7809
           "ctrl-alt-n      switch to virtual console 'n'\n"
7810
           "ctrl-alt        toggle mouse and keyboard grab\n"
7811
           "\n"
7812
           "When using -nographic, press 'ctrl-a h' to get some help.\n"
7813
           ,
7814
           "qemu",
7815
           DEFAULT_RAM_SIZE,
7816
#ifndef _WIN32
7817
           DEFAULT_NETWORK_SCRIPT,
7818
           DEFAULT_NETWORK_DOWN_SCRIPT,
7819
#endif
7820
           DEFAULT_GDBSTUB_PORT,
7821
           "/tmp/qemu.log");
7822
    exit(exitcode);
7823
}
7824

    
7825
#define HAS_ARG 0x0001
7826

    
7827
enum {
7828
    QEMU_OPTION_h,
7829

    
7830
    QEMU_OPTION_M,
7831
    QEMU_OPTION_cpu,
7832
    QEMU_OPTION_fda,
7833
    QEMU_OPTION_fdb,
7834
    QEMU_OPTION_hda,
7835
    QEMU_OPTION_hdb,
7836
    QEMU_OPTION_hdc,
7837
    QEMU_OPTION_hdd,
7838
    QEMU_OPTION_drive,
7839
    QEMU_OPTION_cdrom,
7840
    QEMU_OPTION_mtdblock,
7841
    QEMU_OPTION_sd,
7842
    QEMU_OPTION_pflash,
7843
    QEMU_OPTION_boot,
7844
    QEMU_OPTION_snapshot,
7845
#ifdef TARGET_I386
7846
    QEMU_OPTION_no_fd_bootchk,
7847
#endif
7848
    QEMU_OPTION_m,
7849
    QEMU_OPTION_nographic,
7850
    QEMU_OPTION_portrait,
7851
#ifdef HAS_AUDIO
7852
    QEMU_OPTION_audio_help,
7853
    QEMU_OPTION_soundhw,
7854
#endif
7855

    
7856
    QEMU_OPTION_net,
7857
    QEMU_OPTION_tftp,
7858
    QEMU_OPTION_bootp,
7859
    QEMU_OPTION_smb,
7860
    QEMU_OPTION_redir,
7861

    
7862
    QEMU_OPTION_kernel,
7863
    QEMU_OPTION_append,
7864
    QEMU_OPTION_initrd,
7865

    
7866
    QEMU_OPTION_S,
7867
    QEMU_OPTION_s,
7868
    QEMU_OPTION_p,
7869
    QEMU_OPTION_d,
7870
    QEMU_OPTION_hdachs,
7871
    QEMU_OPTION_L,
7872
    QEMU_OPTION_bios,
7873
    QEMU_OPTION_k,
7874
    QEMU_OPTION_localtime,
7875
    QEMU_OPTION_cirrusvga,
7876
    QEMU_OPTION_vmsvga,
7877
    QEMU_OPTION_g,
7878
    QEMU_OPTION_std_vga,
7879
    QEMU_OPTION_echr,
7880
    QEMU_OPTION_monitor,
7881
    QEMU_OPTION_serial,
7882
    QEMU_OPTION_parallel,
7883
    QEMU_OPTION_loadvm,
7884
    QEMU_OPTION_full_screen,
7885
    QEMU_OPTION_no_frame,
7886
    QEMU_OPTION_alt_grab,
7887
    QEMU_OPTION_no_quit,
7888
    QEMU_OPTION_pidfile,
7889
    QEMU_OPTION_no_kqemu,
7890
    QEMU_OPTION_kernel_kqemu,
7891
    QEMU_OPTION_win2k_hack,
7892
    QEMU_OPTION_usb,
7893
    QEMU_OPTION_usbdevice,
7894
    QEMU_OPTION_smp,
7895
    QEMU_OPTION_vnc,
7896
    QEMU_OPTION_no_acpi,
7897
    QEMU_OPTION_curses,
7898
    QEMU_OPTION_no_reboot,
7899
    QEMU_OPTION_no_shutdown,
7900
    QEMU_OPTION_show_cursor,
7901
    QEMU_OPTION_daemonize,
7902
    QEMU_OPTION_option_rom,
7903
    QEMU_OPTION_semihosting,
7904
    QEMU_OPTION_name,
7905
    QEMU_OPTION_prom_env,
7906
    QEMU_OPTION_old_param,
7907
    QEMU_OPTION_clock,
7908
    QEMU_OPTION_startdate,
7909
    QEMU_OPTION_tb_size,
7910
    QEMU_OPTION_icount,
7911
};
7912

    
7913
typedef struct QEMUOption {
7914
    const char *name;
7915
    int flags;
7916
    int index;
7917
} QEMUOption;
7918

    
7919
const QEMUOption qemu_options[] = {
7920
    { "h", 0, QEMU_OPTION_h },
7921
    { "help", 0, QEMU_OPTION_h },
7922

    
7923
    { "M", HAS_ARG, QEMU_OPTION_M },
7924
    { "cpu", HAS_ARG, QEMU_OPTION_cpu },
7925
    { "fda", HAS_ARG, QEMU_OPTION_fda },
7926
    { "fdb", HAS_ARG, QEMU_OPTION_fdb },
7927
    { "hda", HAS_ARG, QEMU_OPTION_hda },
7928
    { "hdb", HAS_ARG, QEMU_OPTION_hdb },
7929
    { "hdc", HAS_ARG, QEMU_OPTION_hdc },
7930
    { "hdd", HAS_ARG, QEMU_OPTION_hdd },
7931
    { "drive", HAS_ARG, QEMU_OPTION_drive },
7932
    { "cdrom", HAS_ARG, QEMU_OPTION_cdrom },
7933
    { "mtdblock", HAS_ARG, QEMU_OPTION_mtdblock },
7934
    { "sd", HAS_ARG, QEMU_OPTION_sd },
7935
    { "pflash", HAS_ARG, QEMU_OPTION_pflash },
7936
    { "boot", HAS_ARG, QEMU_OPTION_boot },
7937
    { "snapshot", 0, QEMU_OPTION_snapshot },
7938
#ifdef TARGET_I386
7939
    { "no-fd-bootchk", 0, QEMU_OPTION_no_fd_bootchk },
7940
#endif
7941
    { "m", HAS_ARG, QEMU_OPTION_m },
7942
    { "nographic", 0, QEMU_OPTION_nographic },
7943
    { "portrait", 0, QEMU_OPTION_portrait },
7944
    { "k", HAS_ARG, QEMU_OPTION_k },
7945
#ifdef HAS_AUDIO
7946
    { "audio-help", 0, QEMU_OPTION_audio_help },
7947
    { "soundhw", HAS_ARG, QEMU_OPTION_soundhw },
7948
#endif
7949

    
7950
    { "net", HAS_ARG, QEMU_OPTION_net},
7951
#ifdef CONFIG_SLIRP
7952
    { "tftp", HAS_ARG, QEMU_OPTION_tftp },
7953
    { "bootp", HAS_ARG, QEMU_OPTION_bootp },
7954
#ifndef _WIN32
7955
    { "smb", HAS_ARG, QEMU_OPTION_smb },
7956
#endif
7957
    { "redir", HAS_ARG, QEMU_OPTION_redir },
7958
#endif
7959

    
7960
    { "kernel", HAS_ARG, QEMU_OPTION_kernel },
7961
    { "append", HAS_ARG, QEMU_OPTION_append },
7962
    { "initrd", HAS_ARG, QEMU_OPTION_initrd },
7963

    
7964
    { "S", 0, QEMU_OPTION_S },
7965
    { "s", 0, QEMU_OPTION_s },
7966
    { "p", HAS_ARG, QEMU_OPTION_p },
7967
    { "d", HAS_ARG, QEMU_OPTION_d },
7968
    { "hdachs", HAS_ARG, QEMU_OPTION_hdachs },
7969
    { "L", HAS_ARG, QEMU_OPTION_L },
7970
    { "bios", HAS_ARG, QEMU_OPTION_bios },
7971
#ifdef USE_KQEMU
7972
    { "no-kqemu", 0, QEMU_OPTION_no_kqemu },
7973
    { "kernel-kqemu", 0, QEMU_OPTION_kernel_kqemu },
7974
#endif
7975
#if defined(TARGET_PPC) || defined(TARGET_SPARC)
7976
    { "g", 1, QEMU_OPTION_g },
7977
#endif
7978
    { "localtime", 0, QEMU_OPTION_localtime },
7979
    { "std-vga", 0, QEMU_OPTION_std_vga },
7980
    { "echr", HAS_ARG, QEMU_OPTION_echr },
7981
    { "monitor", HAS_ARG, QEMU_OPTION_monitor },
7982
    { "serial", HAS_ARG, QEMU_OPTION_serial },
7983
    { "parallel", HAS_ARG, QEMU_OPTION_parallel },
7984
    { "loadvm", HAS_ARG, QEMU_OPTION_loadvm },
7985
    { "full-screen", 0, QEMU_OPTION_full_screen },
7986
#ifdef CONFIG_SDL
7987
    { "no-frame", 0, QEMU_OPTION_no_frame },
7988
    { "alt-grab", 0, QEMU_OPTION_alt_grab },
7989
    { "no-quit", 0, QEMU_OPTION_no_quit },
7990
#endif
7991
    { "pidfile", HAS_ARG, QEMU_OPTION_pidfile },
7992
    { "win2k-hack", 0, QEMU_OPTION_win2k_hack },
7993
    { "usbdevice", HAS_ARG, QEMU_OPTION_usbdevice },
7994
    { "smp", HAS_ARG, QEMU_OPTION_smp },
7995
    { "vnc", HAS_ARG, QEMU_OPTION_vnc },
7996
#ifdef CONFIG_CURSES
7997
    { "curses", 0, QEMU_OPTION_curses },
7998
#endif
7999

    
8000
    /* temporary options */
8001
    { "usb", 0, QEMU_OPTION_usb },
8002
    { "cirrusvga", 0, QEMU_OPTION_cirrusvga },
8003
    { "vmwarevga", 0, QEMU_OPTION_vmsvga },
8004
    { "no-acpi", 0, QEMU_OPTION_no_acpi },
8005
    { "no-reboot", 0, QEMU_OPTION_no_reboot },
8006
    { "no-shutdown", 0, QEMU_OPTION_no_shutdown },
8007
    { "show-cursor", 0, QEMU_OPTION_show_cursor },
8008
    { "daemonize", 0, QEMU_OPTION_daemonize },
8009
    { "option-rom", HAS_ARG, QEMU_OPTION_option_rom },
8010
#if defined(TARGET_ARM) || defined(TARGET_M68K)
8011
    { "semihosting", 0, QEMU_OPTION_semihosting },
8012
#endif
8013
    { "name", HAS_ARG, QEMU_OPTION_name },
8014
#if defined(TARGET_SPARC)
8015
    { "prom-env", HAS_ARG, QEMU_OPTION_prom_env },
8016
#endif
8017
#if defined(TARGET_ARM)
8018
    { "old-param", 0, QEMU_OPTION_old_param },
8019
#endif
8020
    { "clock", HAS_ARG, QEMU_OPTION_clock },
8021
    { "startdate", HAS_ARG, QEMU_OPTION_startdate },
8022
    { "tb-size", HAS_ARG, QEMU_OPTION_tb_size },
8023
    { "icount", HAS_ARG, QEMU_OPTION_icount },
8024
    { NULL },
8025
};
8026

    
8027
/* password input */
8028

    
8029
int qemu_key_check(BlockDriverState *bs, const char *name)
8030
{
8031
    char password[256];
8032
    int i;
8033

    
8034
    if (!bdrv_is_encrypted(bs))
8035
        return 0;
8036

    
8037
    term_printf("%s is encrypted.\n", name);
8038
    for(i = 0; i < 3; i++) {
8039
        monitor_readline("Password: ", 1, password, sizeof(password));
8040
        if (bdrv_set_key(bs, password) == 0)
8041
            return 0;
8042
        term_printf("invalid password\n");
8043
    }
8044
    return -EPERM;
8045
}
8046

    
8047
static BlockDriverState *get_bdrv(int index)
8048
{
8049
    if (index > nb_drives)
8050
        return NULL;
8051
    return drives_table[index].bdrv;
8052
}
8053

    
8054
static void read_passwords(void)
8055
{
8056
    BlockDriverState *bs;
8057
    int i;
8058

    
8059
    for(i = 0; i < 6; i++) {
8060
        bs = get_bdrv(i);
8061
        if (bs)
8062
            qemu_key_check(bs, bdrv_get_device_name(bs));
8063
    }
8064
}
8065

    
8066
#ifdef HAS_AUDIO
8067
struct soundhw soundhw[] = {
8068
#ifdef HAS_AUDIO_CHOICE
8069
#if defined(TARGET_I386) || defined(TARGET_MIPS)
8070
    {
8071
        "pcspk",
8072
        "PC speaker",
8073
        0,
8074
        1,
8075
        { .init_isa = pcspk_audio_init }
8076
    },
8077
#endif
8078
    {
8079
        "sb16",
8080
        "Creative Sound Blaster 16",
8081
        0,
8082
        1,
8083
        { .init_isa = SB16_init }
8084
    },
8085

    
8086
#ifdef CONFIG_CS4231A
8087
    {
8088
        "cs4231a",
8089
        "CS4231A",
8090
        0,
8091
        1,
8092
        { .init_isa = cs4231a_init }
8093
    },
8094
#endif
8095

    
8096
#ifdef CONFIG_ADLIB
8097
    {
8098
        "adlib",
8099
#ifdef HAS_YMF262
8100
        "Yamaha YMF262 (OPL3)",
8101
#else
8102
        "Yamaha YM3812 (OPL2)",
8103
#endif
8104
        0,
8105
        1,
8106
        { .init_isa = Adlib_init }
8107
    },
8108
#endif
8109

    
8110
#ifdef CONFIG_GUS
8111
    {
8112
        "gus",
8113
        "Gravis Ultrasound GF1",
8114
        0,
8115
        1,
8116
        { .init_isa = GUS_init }
8117
    },
8118
#endif
8119

    
8120
#ifdef CONFIG_AC97
8121
    {
8122
        "ac97",
8123
        "Intel 82801AA AC97 Audio",
8124
        0,
8125
        0,
8126
        { .init_pci = ac97_init }
8127
    },
8128
#endif
8129

    
8130
    {
8131
        "es1370",
8132
        "ENSONIQ AudioPCI ES1370",
8133
        0,
8134
        0,
8135
        { .init_pci = es1370_init }
8136
    },
8137
#endif
8138

    
8139
    { NULL, NULL, 0, 0, { NULL } }
8140
};
8141

    
8142
static void select_soundhw (const char *optarg)
8143
{
8144
    struct soundhw *c;
8145

    
8146
    if (*optarg == '?') {
8147
    show_valid_cards:
8148

    
8149
        printf ("Valid sound card names (comma separated):\n");
8150
        for (c = soundhw; c->name; ++c) {
8151
            printf ("%-11s %s\n", c->name, c->descr);
8152
        }
8153
        printf ("\n-soundhw all will enable all of the above\n");
8154
        exit (*optarg != '?');
8155
    }
8156
    else {
8157
        size_t l;
8158
        const char *p;
8159
        char *e;
8160
        int bad_card = 0;
8161

    
8162
        if (!strcmp (optarg, "all")) {
8163
            for (c = soundhw; c->name; ++c) {
8164
                c->enabled = 1;
8165
            }
8166
            return;
8167
        }
8168

    
8169
        p = optarg;
8170
        while (*p) {
8171
            e = strchr (p, ',');
8172
            l = !e ? strlen (p) : (size_t) (e - p);
8173

    
8174
            for (c = soundhw; c->name; ++c) {
8175
                if (!strncmp (c->name, p, l)) {
8176
                    c->enabled = 1;
8177
                    break;
8178
                }
8179
            }
8180

    
8181
            if (!c->name) {
8182
                if (l > 80) {
8183
                    fprintf (stderr,
8184
                             "Unknown sound card name (too big to show)\n");
8185
                }
8186
                else {
8187
                    fprintf (stderr, "Unknown sound card name `%.*s'\n",
8188
                             (int) l, p);
8189
                }
8190
                bad_card = 1;
8191
            }
8192
            p += l + (e != NULL);
8193
        }
8194

    
8195
        if (bad_card)
8196
            goto show_valid_cards;
8197
    }
8198
}
8199
#endif
8200

    
8201
#ifdef _WIN32
8202
static BOOL WINAPI qemu_ctrl_handler(DWORD type)
8203
{
8204
    exit(STATUS_CONTROL_C_EXIT);
8205
    return TRUE;
8206
}
8207
#endif
8208

    
8209
#define MAX_NET_CLIENTS 32
8210

    
8211
#ifndef _WIN32
8212

    
8213
static void termsig_handler(int signal)
8214
{
8215
    qemu_system_shutdown_request();
8216
}
8217

    
8218
static void termsig_setup(void)
8219
{
8220
    struct sigaction act;
8221

    
8222
    memset(&act, 0, sizeof(act));
8223
    act.sa_handler = termsig_handler;
8224
    sigaction(SIGINT,  &act, NULL);
8225
    sigaction(SIGHUP,  &act, NULL);
8226
    sigaction(SIGTERM, &act, NULL);
8227
}
8228

    
8229
#endif
8230

    
8231
int main(int argc, char **argv)
8232
{
8233
#ifdef CONFIG_GDBSTUB
8234
    int use_gdbstub;
8235
    const char *gdbstub_port;
8236
#endif
8237
    uint32_t boot_devices_bitmap = 0;
8238
    int i;
8239
    int snapshot, linux_boot, net_boot;
8240
    const char *initrd_filename;
8241
    const char *kernel_filename, *kernel_cmdline;
8242
    const char *boot_devices = "";
8243
    DisplayState *ds = &display_state;
8244
    int cyls, heads, secs, translation;
8245
    const char *net_clients[MAX_NET_CLIENTS];
8246
    int nb_net_clients;
8247
    int hda_index;
8248
    int optind;
8249
    const char *r, *optarg;
8250
    CharDriverState *monitor_hd;
8251
    const char *monitor_device;
8252
    const char *serial_devices[MAX_SERIAL_PORTS];
8253
    int serial_device_index;
8254
    const char *parallel_devices[MAX_PARALLEL_PORTS];
8255
    int parallel_device_index;
8256
    const char *loadvm = NULL;
8257
    QEMUMachine *machine;
8258
    const char *cpu_model;
8259
    const char *usb_devices[MAX_USB_CMDLINE];
8260
    int usb_devices_index;
8261
    int fds[2];
8262
    int tb_size;
8263
    const char *pid_file = NULL;
8264
    VLANState *vlan;
8265

    
8266
    LIST_INIT (&vm_change_state_head);
8267
#ifndef _WIN32
8268
    {
8269
        struct sigaction act;
8270
        sigfillset(&act.sa_mask);
8271
        act.sa_flags = 0;
8272
        act.sa_handler = SIG_IGN;
8273
        sigaction(SIGPIPE, &act, NULL);
8274
    }
8275
#else
8276
    SetConsoleCtrlHandler(qemu_ctrl_handler, TRUE);
8277
    /* Note: cpu_interrupt() is currently not SMP safe, so we force
8278
       QEMU to run on a single CPU */
8279
    {
8280
        HANDLE h;
8281
        DWORD mask, smask;
8282
        int i;
8283
        h = GetCurrentProcess();
8284
        if (GetProcessAffinityMask(h, &mask, &smask)) {
8285
            for(i = 0; i < 32; i++) {
8286
                if (mask & (1 << i))
8287
                    break;
8288
            }
8289
            if (i != 32) {
8290
                mask = 1 << i;
8291
                SetProcessAffinityMask(h, mask);
8292
            }
8293
        }
8294
    }
8295
#endif
8296

    
8297
    register_machines();
8298
    machine = first_machine;
8299
    cpu_model = NULL;
8300
    initrd_filename = NULL;
8301
    ram_size = 0;
8302
    vga_ram_size = VGA_RAM_SIZE;
8303
#ifdef CONFIG_GDBSTUB
8304
    use_gdbstub = 0;
8305
    gdbstub_port = DEFAULT_GDBSTUB_PORT;
8306
#endif
8307
    snapshot = 0;
8308
    nographic = 0;
8309
    curses = 0;
8310
    kernel_filename = NULL;
8311
    kernel_cmdline = "";
8312
    cyls = heads = secs = 0;
8313
    translation = BIOS_ATA_TRANSLATION_AUTO;
8314
    monitor_device = "vc";
8315

    
8316
    serial_devices[0] = "vc:80Cx24C";
8317
    for(i = 1; i < MAX_SERIAL_PORTS; i++)
8318
        serial_devices[i] = NULL;
8319
    serial_device_index = 0;
8320

    
8321
    parallel_devices[0] = "vc:640x480";
8322
    for(i = 1; i < MAX_PARALLEL_PORTS; i++)
8323
        parallel_devices[i] = NULL;
8324
    parallel_device_index = 0;
8325

    
8326
    usb_devices_index = 0;
8327

    
8328
    nb_net_clients = 0;
8329
    nb_drives = 0;
8330
    nb_drives_opt = 0;
8331
    hda_index = -1;
8332

    
8333
    nb_nics = 0;
8334

    
8335
    tb_size = 0;
8336
    
8337
    optind = 1;
8338
    for(;;) {
8339
        if (optind >= argc)
8340
            break;
8341
        r = argv[optind];
8342
        if (r[0] != '-') {
8343
            hda_index = drive_add(argv[optind++], HD_ALIAS, 0);
8344
        } else {
8345
            const QEMUOption *popt;
8346

    
8347
            optind++;
8348
            /* Treat --foo the same as -foo.  */
8349
            if (r[1] == '-')
8350
                r++;
8351
            popt = qemu_options;
8352
            for(;;) {
8353
                if (!popt->name) {
8354
                    fprintf(stderr, "%s: invalid option -- '%s'\n",
8355
                            argv[0], r);
8356
                    exit(1);
8357
                }
8358
                if (!strcmp(popt->name, r + 1))
8359
                    break;
8360
                popt++;
8361
            }
8362
            if (popt->flags & HAS_ARG) {
8363
                if (optind >= argc) {
8364
                    fprintf(stderr, "%s: option '%s' requires an argument\n",
8365
                            argv[0], r);
8366
                    exit(1);
8367
                }
8368
                optarg = argv[optind++];
8369
            } else {
8370
                optarg = NULL;
8371
            }
8372

    
8373
            switch(popt->index) {
8374
            case QEMU_OPTION_M:
8375
                machine = find_machine(optarg);
8376
                if (!machine) {
8377
                    QEMUMachine *m;
8378
                    printf("Supported machines are:\n");
8379
                    for(m = first_machine; m != NULL; m = m->next) {
8380
                        printf("%-10s %s%s\n",
8381
                               m->name, m->desc,
8382
                               m == first_machine ? " (default)" : "");
8383
                    }
8384
                    exit(*optarg != '?');
8385
                }
8386
                break;
8387
            case QEMU_OPTION_cpu:
8388
                /* hw initialization will check this */
8389
                if (*optarg == '?') {
8390
/* XXX: implement xxx_cpu_list for targets that still miss it */
8391
#if defined(cpu_list)
8392
                    cpu_list(stdout, &fprintf);
8393
#endif
8394
                    exit(0);
8395
                } else {
8396
                    cpu_model = optarg;
8397
                }
8398
                break;
8399
            case QEMU_OPTION_initrd:
8400
                initrd_filename = optarg;
8401
                break;
8402
            case QEMU_OPTION_hda:
8403
                if (cyls == 0)
8404
                    hda_index = drive_add(optarg, HD_ALIAS, 0);
8405
                else
8406
                    hda_index = drive_add(optarg, HD_ALIAS
8407
                             ",cyls=%d,heads=%d,secs=%d%s",
8408
                             0, cyls, heads, secs,
8409
                             translation == BIOS_ATA_TRANSLATION_LBA ?
8410
                                 ",trans=lba" :
8411
                             translation == BIOS_ATA_TRANSLATION_NONE ?
8412
                                 ",trans=none" : "");
8413
                 break;
8414
            case QEMU_OPTION_hdb:
8415
            case QEMU_OPTION_hdc:
8416
            case QEMU_OPTION_hdd:
8417
                drive_add(optarg, HD_ALIAS, popt->index - QEMU_OPTION_hda);
8418
                break;
8419
            case QEMU_OPTION_drive:
8420
                drive_add(NULL, "%s", optarg);
8421
                break;
8422
            case QEMU_OPTION_mtdblock:
8423
                drive_add(optarg, MTD_ALIAS);
8424
                break;
8425
            case QEMU_OPTION_sd:
8426
                drive_add(optarg, SD_ALIAS);
8427
                break;
8428
            case QEMU_OPTION_pflash:
8429
                drive_add(optarg, PFLASH_ALIAS);
8430
                break;
8431
            case QEMU_OPTION_snapshot:
8432
                snapshot = 1;
8433
                break;
8434
            case QEMU_OPTION_hdachs:
8435
                {
8436
                    const char *p;
8437
                    p = optarg;
8438
                    cyls = strtol(p, (char **)&p, 0);
8439
                    if (cyls < 1 || cyls > 16383)
8440
                        goto chs_fail;
8441
                    if (*p != ',')
8442
                        goto chs_fail;
8443
                    p++;
8444
                    heads = strtol(p, (char **)&p, 0);
8445
                    if (heads < 1 || heads > 16)
8446
                        goto chs_fail;
8447
                    if (*p != ',')
8448
                        goto chs_fail;
8449
                    p++;
8450
                    secs = strtol(p, (char **)&p, 0);
8451
                    if (secs < 1 || secs > 63)
8452
                        goto chs_fail;
8453
                    if (*p == ',') {
8454
                        p++;
8455
                        if (!strcmp(p, "none"))
8456
                            translation = BIOS_ATA_TRANSLATION_NONE;
8457
                        else if (!strcmp(p, "lba"))
8458
                            translation = BIOS_ATA_TRANSLATION_LBA;
8459
                        else if (!strcmp(p, "auto"))
8460
                            translation = BIOS_ATA_TRANSLATION_AUTO;
8461
                        else
8462
                            goto chs_fail;
8463
                    } else if (*p != '\0') {
8464
                    chs_fail:
8465
                        fprintf(stderr, "qemu: invalid physical CHS format\n");
8466
                        exit(1);
8467
                    }
8468
                    if (hda_index != -1)
8469
                        snprintf(drives_opt[hda_index].opt,
8470
                                 sizeof(drives_opt[hda_index].opt),
8471
                                 HD_ALIAS ",cyls=%d,heads=%d,secs=%d%s",
8472
                                 0, cyls, heads, secs,
8473
                                 translation == BIOS_ATA_TRANSLATION_LBA ?
8474
                                         ",trans=lba" :
8475
                                 translation == BIOS_ATA_TRANSLATION_NONE ?
8476
                                     ",trans=none" : "");
8477
                }
8478
                break;
8479
            case QEMU_OPTION_nographic:
8480
                nographic = 1;
8481
                break;
8482
#ifdef CONFIG_CURSES
8483
            case QEMU_OPTION_curses:
8484
                curses = 1;
8485
                break;
8486
#endif
8487
            case QEMU_OPTION_portrait:
8488
                graphic_rotate = 1;
8489
                break;
8490
            case QEMU_OPTION_kernel:
8491
                kernel_filename = optarg;
8492
                break;
8493
            case QEMU_OPTION_append:
8494
                kernel_cmdline = optarg;
8495
                break;
8496
            case QEMU_OPTION_cdrom:
8497
                drive_add(optarg, CDROM_ALIAS);
8498
                break;
8499
            case QEMU_OPTION_boot:
8500
                boot_devices = optarg;
8501
                /* We just do some generic consistency checks */
8502
                {
8503
                    /* Could easily be extended to 64 devices if needed */
8504
                    const char *p;
8505
                    
8506
                    boot_devices_bitmap = 0;
8507
                    for (p = boot_devices; *p != '\0'; p++) {
8508
                        /* Allowed boot devices are:
8509
                         * a b     : floppy disk drives
8510
                         * c ... f : IDE disk drives
8511
                         * g ... m : machine implementation dependant drives
8512
                         * n ... p : network devices
8513
                         * It's up to each machine implementation to check
8514
                         * if the given boot devices match the actual hardware
8515
                         * implementation and firmware features.
8516
                         */
8517
                        if (*p < 'a' || *p > 'q') {
8518
                            fprintf(stderr, "Invalid boot device '%c'\n", *p);
8519
                            exit(1);
8520
                        }
8521
                        if (boot_devices_bitmap & (1 << (*p - 'a'))) {
8522
                            fprintf(stderr,
8523
                                    "Boot device '%c' was given twice\n",*p);
8524
                            exit(1);
8525
                        }
8526
                        boot_devices_bitmap |= 1 << (*p - 'a');
8527
                    }
8528
                }
8529
                break;
8530
            case QEMU_OPTION_fda:
8531
            case QEMU_OPTION_fdb:
8532
                drive_add(optarg, FD_ALIAS, popt->index - QEMU_OPTION_fda);
8533
                break;
8534
#ifdef TARGET_I386
8535
            case QEMU_OPTION_no_fd_bootchk:
8536
                fd_bootchk = 0;
8537
                break;
8538
#endif
8539
            case QEMU_OPTION_net:
8540
                if (nb_net_clients >= MAX_NET_CLIENTS) {
8541
                    fprintf(stderr, "qemu: too many network clients\n");
8542
                    exit(1);
8543
                }
8544
                net_clients[nb_net_clients] = optarg;
8545
                nb_net_clients++;
8546
                break;
8547
#ifdef CONFIG_SLIRP
8548
            case QEMU_OPTION_tftp:
8549
                tftp_prefix = optarg;
8550
                break;
8551
            case QEMU_OPTION_bootp:
8552
                bootp_filename = optarg;
8553
                break;
8554
#ifndef _WIN32
8555
            case QEMU_OPTION_smb:
8556
                net_slirp_smb(optarg);
8557
                break;
8558
#endif
8559
            case QEMU_OPTION_redir:
8560
                net_slirp_redir(optarg);
8561
                break;
8562
#endif
8563
#ifdef HAS_AUDIO
8564
            case QEMU_OPTION_audio_help:
8565
                AUD_help ();
8566
                exit (0);
8567
                break;
8568
            case QEMU_OPTION_soundhw:
8569
                select_soundhw (optarg);
8570
                break;
8571
#endif
8572
            case QEMU_OPTION_h:
8573
                help(0);
8574
                break;
8575
            case QEMU_OPTION_m: {
8576
                uint64_t value;
8577
                char *ptr;
8578

    
8579
                value = strtoul(optarg, &ptr, 10);
8580
                switch (*ptr) {
8581
                case 0: case 'M': case 'm':
8582
                    value <<= 20;
8583
                    break;
8584
                case 'G': case 'g':
8585
                    value <<= 30;
8586
                    break;
8587
                default:
8588
                    fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
8589
                    exit(1);
8590
                }
8591

    
8592
                /* On 32-bit hosts, QEMU is limited by virtual address space */
8593
                if (value > (2047 << 20)
8594
#ifndef USE_KQEMU
8595
                    && HOST_LONG_BITS == 32
8596
#endif
8597
                    ) {
8598
                    fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n");
8599
                    exit(1);
8600
                }
8601
                if (value != (uint64_t)(ram_addr_t)value) {
8602
                    fprintf(stderr, "qemu: ram size too large\n");
8603
                    exit(1);
8604
                }
8605
                ram_size = value;
8606
                break;
8607
            }
8608
            case QEMU_OPTION_d:
8609
                {
8610
                    int mask;
8611
                    CPULogItem *item;
8612

    
8613
                    mask = cpu_str_to_log_mask(optarg);
8614
                    if (!mask) {
8615
                        printf("Log items (comma separated):\n");
8616
                    for(item = cpu_log_items; item->mask != 0; item++) {
8617
                        printf("%-10s %s\n", item->name, item->help);
8618
                    }
8619
                    exit(1);
8620
                    }
8621
                    cpu_set_log(mask);
8622
                }
8623
                break;
8624
#ifdef CONFIG_GDBSTUB
8625
            case QEMU_OPTION_s:
8626
                use_gdbstub = 1;
8627
                break;
8628
            case QEMU_OPTION_p:
8629
                gdbstub_port = optarg;
8630
                break;
8631
#endif
8632
            case QEMU_OPTION_L:
8633
                bios_dir = optarg;
8634
                break;
8635
            case QEMU_OPTION_bios:
8636
                bios_name = optarg;
8637
                break;
8638
            case QEMU_OPTION_S:
8639
                autostart = 0;
8640
                break;
8641
            case QEMU_OPTION_k:
8642
                keyboard_layout = optarg;
8643
                break;
8644
            case QEMU_OPTION_localtime:
8645
                rtc_utc = 0;
8646
                break;
8647
            case QEMU_OPTION_cirrusvga:
8648
                cirrus_vga_enabled = 1;
8649
                vmsvga_enabled = 0;
8650
                break;
8651
            case QEMU_OPTION_vmsvga:
8652
                cirrus_vga_enabled = 0;
8653
                vmsvga_enabled = 1;
8654
                break;
8655
            case QEMU_OPTION_std_vga:
8656
                cirrus_vga_enabled = 0;
8657
                vmsvga_enabled = 0;
8658
                break;
8659
            case QEMU_OPTION_g:
8660
                {
8661
                    const char *p;
8662
                    int w, h, depth;
8663
                    p = optarg;
8664
                    w = strtol(p, (char **)&p, 10);
8665
                    if (w <= 0) {
8666
                    graphic_error:
8667
                        fprintf(stderr, "qemu: invalid resolution or depth\n");
8668
                        exit(1);
8669
                    }
8670
                    if (*p != 'x')
8671
                        goto graphic_error;
8672
                    p++;
8673
                    h = strtol(p, (char **)&p, 10);
8674
                    if (h <= 0)
8675
                        goto graphic_error;
8676
                    if (*p == 'x') {
8677
                        p++;
8678
                        depth = strtol(p, (char **)&p, 10);
8679
                        if (depth != 8 && depth != 15 && depth != 16 &&
8680
                            depth != 24 && depth != 32)
8681
                            goto graphic_error;
8682
                    } else if (*p == '\0') {
8683
                        depth = graphic_depth;
8684
                    } else {
8685
                        goto graphic_error;
8686
                    }
8687

    
8688
                    graphic_width = w;
8689
                    graphic_height = h;
8690
                    graphic_depth = depth;
8691
                }
8692
                break;
8693
            case QEMU_OPTION_echr:
8694
                {
8695
                    char *r;
8696
                    term_escape_char = strtol(optarg, &r, 0);
8697
                    if (r == optarg)
8698
                        printf("Bad argument to echr\n");
8699
                    break;
8700
                }
8701
            case QEMU_OPTION_monitor:
8702
                monitor_device = optarg;
8703
                break;
8704
            case QEMU_OPTION_serial:
8705
                if (serial_device_index >= MAX_SERIAL_PORTS) {
8706
                    fprintf(stderr, "qemu: too many serial ports\n");
8707
                    exit(1);
8708
                }
8709
                serial_devices[serial_device_index] = optarg;
8710
                serial_device_index++;
8711
                break;
8712
            case QEMU_OPTION_parallel:
8713
                if (parallel_device_index >= MAX_PARALLEL_PORTS) {
8714
                    fprintf(stderr, "qemu: too many parallel ports\n");
8715
                    exit(1);
8716
                }
8717
                parallel_devices[parallel_device_index] = optarg;
8718
                parallel_device_index++;
8719
                break;
8720
            case QEMU_OPTION_loadvm:
8721
                loadvm = optarg;
8722
                break;
8723
            case QEMU_OPTION_full_screen:
8724
                full_screen = 1;
8725
                break;
8726
#ifdef CONFIG_SDL
8727
            case QEMU_OPTION_no_frame:
8728
                no_frame = 1;
8729
                break;
8730
            case QEMU_OPTION_alt_grab:
8731
                alt_grab = 1;
8732
                break;
8733
            case QEMU_OPTION_no_quit:
8734
                no_quit = 1;
8735
                break;
8736
#endif
8737
            case QEMU_OPTION_pidfile:
8738
                pid_file = optarg;
8739
                break;
8740
#ifdef TARGET_I386
8741
            case QEMU_OPTION_win2k_hack:
8742
                win2k_install_hack = 1;
8743
                break;
8744
#endif
8745
#ifdef USE_KQEMU
8746
            case QEMU_OPTION_no_kqemu:
8747
                kqemu_allowed = 0;
8748
                break;
8749
            case QEMU_OPTION_kernel_kqemu:
8750
                kqemu_allowed = 2;
8751
                break;
8752
#endif
8753
            case QEMU_OPTION_usb:
8754
                usb_enabled = 1;
8755
                break;
8756
            case QEMU_OPTION_usbdevice:
8757
                usb_enabled = 1;
8758
                if (usb_devices_index >= MAX_USB_CMDLINE) {
8759
                    fprintf(stderr, "Too many USB devices\n");
8760
                    exit(1);
8761
                }
8762
                usb_devices[usb_devices_index] = optarg;
8763
                usb_devices_index++;
8764
                break;
8765
            case QEMU_OPTION_smp:
8766
                smp_cpus = atoi(optarg);
8767
                if (smp_cpus < 1 || smp_cpus > MAX_CPUS) {
8768
                    fprintf(stderr, "Invalid number of CPUs\n");
8769
                    exit(1);
8770
                }
8771
                break;
8772
            case QEMU_OPTION_vnc:
8773
                vnc_display = optarg;
8774
                break;
8775
            case QEMU_OPTION_no_acpi:
8776
                acpi_enabled = 0;
8777
                break;
8778
            case QEMU_OPTION_no_reboot:
8779
                no_reboot = 1;
8780
                break;
8781
            case QEMU_OPTION_no_shutdown:
8782
                no_shutdown = 1;
8783
                break;
8784
            case QEMU_OPTION_show_cursor:
8785
                cursor_hide = 0;
8786
                break;
8787
            case QEMU_OPTION_daemonize:
8788
                daemonize = 1;
8789
                break;
8790
            case QEMU_OPTION_option_rom:
8791
                if (nb_option_roms >= MAX_OPTION_ROMS) {
8792
                    fprintf(stderr, "Too many option ROMs\n");
8793
                    exit(1);
8794
                }
8795
                option_rom[nb_option_roms] = optarg;
8796
                nb_option_roms++;
8797
                break;
8798
            case QEMU_OPTION_semihosting:
8799
                semihosting_enabled = 1;
8800
                break;
8801
            case QEMU_OPTION_name:
8802
                qemu_name = optarg;
8803
                break;
8804
#ifdef TARGET_SPARC
8805
            case QEMU_OPTION_prom_env:
8806
                if (nb_prom_envs >= MAX_PROM_ENVS) {
8807
                    fprintf(stderr, "Too many prom variables\n");
8808
                    exit(1);
8809
                }
8810
                prom_envs[nb_prom_envs] = optarg;
8811
                nb_prom_envs++;
8812
                break;
8813
#endif
8814
#ifdef TARGET_ARM
8815
            case QEMU_OPTION_old_param:
8816
                old_param = 1;
8817
                break;
8818
#endif
8819
            case QEMU_OPTION_clock:
8820
                configure_alarms(optarg);
8821
                break;
8822
            case QEMU_OPTION_startdate:
8823
                {
8824
                    struct tm tm;
8825
                    time_t rtc_start_date;
8826
                    if (!strcmp(optarg, "now")) {
8827
                        rtc_date_offset = -1;
8828
                    } else {
8829
                        if (sscanf(optarg, "%d-%d-%dT%d:%d:%d",
8830
                               &tm.tm_year,
8831
                               &tm.tm_mon,
8832
                               &tm.tm_mday,
8833
                               &tm.tm_hour,
8834
                               &tm.tm_min,
8835
                               &tm.tm_sec) == 6) {
8836
                            /* OK */
8837
                        } else if (sscanf(optarg, "%d-%d-%d",
8838
                                          &tm.tm_year,
8839
                                          &tm.tm_mon,
8840
                                          &tm.tm_mday) == 3) {
8841
                            tm.tm_hour = 0;
8842
                            tm.tm_min = 0;
8843
                            tm.tm_sec = 0;
8844
                        } else {
8845
                            goto date_fail;
8846
                        }
8847
                        tm.tm_year -= 1900;
8848
                        tm.tm_mon--;
8849
                        rtc_start_date = mktimegm(&tm);
8850
                        if (rtc_start_date == -1) {
8851
                        date_fail:
8852
                            fprintf(stderr, "Invalid date format. Valid format are:\n"
8853
                                    "'now' or '2006-06-17T16:01:21' or '2006-06-17'\n");
8854
                            exit(1);
8855
                        }
8856
                        rtc_date_offset = time(NULL) - rtc_start_date;
8857
                    }
8858
                }
8859
                break;
8860
            case QEMU_OPTION_tb_size:
8861
                tb_size = strtol(optarg, NULL, 0);
8862
                if (tb_size < 0)
8863
                    tb_size = 0;
8864
                break;
8865
            case QEMU_OPTION_icount:
8866
                use_icount = 1;
8867
                if (strcmp(optarg, "auto") == 0) {
8868
                    icount_time_shift = -1;
8869
                } else {
8870
                    icount_time_shift = strtol(optarg, NULL, 0);
8871
                }
8872
                break;
8873
            }
8874
        }
8875
    }
8876

    
8877
    if (nographic) {
8878
       if (serial_device_index == 0)
8879
           serial_devices[0] = "stdio";
8880
       if (parallel_device_index == 0)
8881
           parallel_devices[0] = "null";
8882
       if (strncmp(monitor_device, "vc", 2) == 0)
8883
           monitor_device = "stdio";
8884
    }
8885

    
8886
#ifndef _WIN32
8887
    if (daemonize) {
8888
        pid_t pid;
8889

    
8890
        if (pipe(fds) == -1)
8891
            exit(1);
8892

    
8893
        pid = fork();
8894
        if (pid > 0) {
8895
            uint8_t status;
8896
            ssize_t len;
8897

    
8898
            close(fds[1]);
8899

    
8900
        again:
8901
            len = read(fds[0], &status, 1);
8902
            if (len == -1 && (errno == EINTR))
8903
                goto again;
8904

    
8905
            if (len != 1)
8906
                exit(1);
8907
            else if (status == 1) {
8908
                fprintf(stderr, "Could not acquire pidfile\n");
8909
                exit(1);
8910
            } else
8911
                exit(0);
8912
        } else if (pid < 0)
8913
            exit(1);
8914

    
8915
        setsid();
8916

    
8917
        pid = fork();
8918
        if (pid > 0)
8919
            exit(0);
8920
        else if (pid < 0)
8921
            exit(1);
8922

    
8923
        umask(027);
8924

    
8925
        signal(SIGTSTP, SIG_IGN);
8926
        signal(SIGTTOU, SIG_IGN);
8927
        signal(SIGTTIN, SIG_IGN);
8928
    }
8929
#endif
8930

    
8931
    if (pid_file && qemu_create_pidfile(pid_file) != 0) {
8932
        if (daemonize) {
8933
            uint8_t status = 1;
8934
            write(fds[1], &status, 1);
8935
        } else
8936
            fprintf(stderr, "Could not acquire pid file\n");
8937
        exit(1);
8938
    }
8939

    
8940
#ifdef USE_KQEMU
8941
    if (smp_cpus > 1)
8942
        kqemu_allowed = 0;
8943
#endif
8944
    linux_boot = (kernel_filename != NULL);
8945
    net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
8946

    
8947
    if (!linux_boot && net_boot == 0 &&
8948
        !machine->nodisk_ok && nb_drives_opt == 0)
8949
        help(1);
8950

    
8951
    if (!linux_boot && *kernel_cmdline != '\0') {
8952
        fprintf(stderr, "-append only allowed with -kernel option\n");
8953
        exit(1);
8954
    }
8955

    
8956
    if (!linux_boot && initrd_filename != NULL) {
8957
        fprintf(stderr, "-initrd only allowed with -kernel option\n");
8958
        exit(1);
8959
    }
8960

    
8961
    /* boot to floppy or the default cd if no hard disk defined yet */
8962
    if (!boot_devices[0]) {
8963
        boot_devices = "cad";
8964
    }
8965
    setvbuf(stdout, NULL, _IOLBF, 0);
8966

    
8967
    init_timers();
8968
    init_timer_alarm();
8969
    qemu_aio_init();
8970
    if (use_icount && icount_time_shift < 0) {
8971
        use_icount = 2;
8972
        /* 125MIPS seems a reasonable initial guess at the guest speed.
8973
           It will be corrected fairly quickly anyway.  */
8974
        icount_time_shift = 3;
8975
        init_icount_adjust();
8976
    }
8977

    
8978
#ifdef _WIN32
8979
    socket_init();
8980
#endif
8981

    
8982
    /* init network clients */
8983
    if (nb_net_clients == 0) {
8984
        /* if no clients, we use a default config */
8985
        net_clients[nb_net_clients++] = "nic";
8986
#ifdef CONFIG_SLIRP
8987
        net_clients[nb_net_clients++] = "user";
8988
#endif
8989
    }
8990

    
8991
    for(i = 0;i < nb_net_clients; i++) {
8992
        if (net_client_parse(net_clients[i]) < 0)
8993
            exit(1);
8994
    }
8995
    for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) {
8996
        if (vlan->nb_guest_devs == 0 && vlan->nb_host_devs == 0)
8997
            continue;
8998
        if (vlan->nb_guest_devs == 0)
8999
            fprintf(stderr, "Warning: vlan %d with no nics\n", vlan->id);
9000
        if (vlan->nb_host_devs == 0)
9001
            fprintf(stderr,
9002
                    "Warning: vlan %d is not connected to host network\n",
9003
                    vlan->id);
9004
    }
9005

    
9006
#ifdef TARGET_I386
9007
    /* XXX: this should be moved in the PC machine instantiation code */
9008
    if (net_boot != 0) {
9009
        int netroms = 0;
9010
        for (i = 0; i < nb_nics && i < 4; i++) {
9011
            const char *model = nd_table[i].model;
9012
            char buf[1024];
9013
            if (net_boot & (1 << i)) {
9014
                if (model == NULL)
9015
                    model = "ne2k_pci";
9016
                snprintf(buf, sizeof(buf), "%s/pxe-%s.bin", bios_dir, model);
9017
                if (get_image_size(buf) > 0) {
9018
                    if (nb_option_roms >= MAX_OPTION_ROMS) {
9019
                        fprintf(stderr, "Too many option ROMs\n");
9020
                        exit(1);
9021
                    }
9022
                    option_rom[nb_option_roms] = strdup(buf);
9023
                    nb_option_roms++;
9024
                    netroms++;
9025
                }
9026
            }
9027
        }
9028
        if (netroms == 0) {
9029
            fprintf(stderr, "No valid PXE rom found for network device\n");
9030
            exit(1);
9031
        }
9032
    }
9033
#endif
9034

    
9035
    /* init the memory */
9036
    phys_ram_size = machine->ram_require & ~RAMSIZE_FIXED;
9037

    
9038
    if (machine->ram_require & RAMSIZE_FIXED) {
9039
        if (ram_size > 0) {
9040
            if (ram_size < phys_ram_size) {
9041
                fprintf(stderr, "Machine `%s' requires %llu bytes of memory\n",
9042
                                machine->name, (unsigned long long) phys_ram_size);
9043
                exit(-1);
9044
            }
9045

    
9046
            phys_ram_size = ram_size;
9047
        } else
9048
            ram_size = phys_ram_size;
9049
    } else {
9050
        if (ram_size == 0)
9051
            ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
9052

    
9053
        phys_ram_size += ram_size;
9054
    }
9055

    
9056
    phys_ram_base = qemu_vmalloc(phys_ram_size);
9057
    if (!phys_ram_base) {
9058
        fprintf(stderr, "Could not allocate physical memory\n");
9059
        exit(1);
9060
    }
9061

    
9062
    /* init the dynamic translator */
9063
    cpu_exec_init_all(tb_size * 1024 * 1024);
9064

    
9065
    bdrv_init();
9066

    
9067
    /* we always create the cdrom drive, even if no disk is there */
9068

    
9069
    if (nb_drives_opt < MAX_DRIVES)
9070
        drive_add(NULL, CDROM_ALIAS);
9071

    
9072
    /* we always create at least one floppy */
9073

    
9074
    if (nb_drives_opt < MAX_DRIVES)
9075
        drive_add(NULL, FD_ALIAS, 0);
9076

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

    
9079
    if (nb_drives_opt < MAX_DRIVES)
9080
        drive_add(NULL, SD_ALIAS);
9081

    
9082
    /* open the virtual block devices */
9083

    
9084
    for(i = 0; i < nb_drives_opt; i++)
9085
        if (drive_init(&drives_opt[i], snapshot, machine) == -1)
9086
            exit(1);
9087

    
9088
    register_savevm("timer", 0, 2, timer_save, timer_load, NULL);
9089
    register_savevm("ram", 0, 2, ram_save, ram_load, NULL);
9090

    
9091
    /* terminal init */
9092
    memset(&display_state, 0, sizeof(display_state));
9093
    if (nographic) {
9094
        if (curses) {
9095
            fprintf(stderr, "fatal: -nographic can't be used with -curses\n");
9096
            exit(1);
9097
        }
9098
        /* nearly nothing to do */
9099
        dumb_display_init(ds);
9100
    } else if (vnc_display != NULL) {
9101
        vnc_display_init(ds);
9102
        if (vnc_display_open(ds, vnc_display) < 0)
9103
            exit(1);
9104
    } else
9105
#if defined(CONFIG_CURSES)
9106
    if (curses) {
9107
        curses_display_init(ds, full_screen);
9108
    } else
9109
#endif
9110
    {
9111
#if defined(CONFIG_SDL)
9112
        sdl_display_init(ds, full_screen, no_frame);
9113
#elif defined(CONFIG_COCOA)
9114
        cocoa_display_init(ds, full_screen);
9115
#else
9116
        dumb_display_init(ds);
9117
#endif
9118
    }
9119

    
9120
#ifndef _WIN32
9121
    /* must be after terminal init, SDL library changes signal handlers */
9122
    termsig_setup();
9123
#endif
9124

    
9125
    /* Maintain compatibility with multiple stdio monitors */
9126
    if (!strcmp(monitor_device,"stdio")) {
9127
        for (i = 0; i < MAX_SERIAL_PORTS; i++) {
9128
            const char *devname = serial_devices[i];
9129
            if (devname && !strcmp(devname,"mon:stdio")) {
9130
                monitor_device = NULL;
9131
                break;
9132
            } else if (devname && !strcmp(devname,"stdio")) {
9133
                monitor_device = NULL;
9134
                serial_devices[i] = "mon:stdio";
9135
                break;
9136
            }
9137
        }
9138
    }
9139
    if (monitor_device) {
9140
        monitor_hd = qemu_chr_open(monitor_device);
9141
        if (!monitor_hd) {
9142
            fprintf(stderr, "qemu: could not open monitor device '%s'\n", monitor_device);
9143
            exit(1);
9144
        }
9145
        monitor_init(monitor_hd, !nographic);
9146
    }
9147

    
9148
    for(i = 0; i < MAX_SERIAL_PORTS; i++) {
9149
        const char *devname = serial_devices[i];
9150
        if (devname && strcmp(devname, "none")) {
9151
            serial_hds[i] = qemu_chr_open(devname);
9152
            if (!serial_hds[i]) {
9153
                fprintf(stderr, "qemu: could not open serial device '%s'\n",
9154
                        devname);
9155
                exit(1);
9156
            }
9157
            if (strstart(devname, "vc", 0))
9158
                qemu_chr_printf(serial_hds[i], "serial%d console\r\n", i);
9159
        }
9160
    }
9161

    
9162
    for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
9163
        const char *devname = parallel_devices[i];
9164
        if (devname && strcmp(devname, "none")) {
9165
            parallel_hds[i] = qemu_chr_open(devname);
9166
            if (!parallel_hds[i]) {
9167
                fprintf(stderr, "qemu: could not open parallel device '%s'\n",
9168
                        devname);
9169
                exit(1);
9170
            }
9171
            if (strstart(devname, "vc", 0))
9172
                qemu_chr_printf(parallel_hds[i], "parallel%d console\r\n", i);
9173
        }
9174
    }
9175

    
9176
    machine->init(ram_size, vga_ram_size, boot_devices, ds,
9177
                  kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
9178

    
9179
    /* init USB devices */
9180
    if (usb_enabled) {
9181
        for(i = 0; i < usb_devices_index; i++) {
9182
            if (usb_device_add(usb_devices[i]) < 0) {
9183
                fprintf(stderr, "Warning: could not add USB device %s\n",
9184
                        usb_devices[i]);
9185
            }
9186
        }
9187
    }
9188

    
9189
    if (display_state.dpy_refresh) {
9190
        display_state.gui_timer = qemu_new_timer(rt_clock, gui_update, &display_state);
9191
        qemu_mod_timer(display_state.gui_timer, qemu_get_clock(rt_clock));
9192
    }
9193

    
9194
#ifdef CONFIG_GDBSTUB
9195
    if (use_gdbstub) {
9196
        /* XXX: use standard host:port notation and modify options
9197
           accordingly. */
9198
        if (gdbserver_start(gdbstub_port) < 0) {
9199
            fprintf(stderr, "qemu: could not open gdbstub device on port '%s'\n",
9200
                    gdbstub_port);
9201
            exit(1);
9202
        }
9203
    }
9204
#endif
9205

    
9206
    if (loadvm)
9207
        do_loadvm(loadvm);
9208

    
9209
    {
9210
        /* XXX: simplify init */
9211
        read_passwords();
9212
        if (autostart) {
9213
            vm_start();
9214
        }
9215
    }
9216

    
9217
    if (daemonize) {
9218
        uint8_t status = 0;
9219
        ssize_t len;
9220
        int fd;
9221

    
9222
    again1:
9223
        len = write(fds[1], &status, 1);
9224
        if (len == -1 && (errno == EINTR))
9225
            goto again1;
9226

    
9227
        if (len != 1)
9228
            exit(1);
9229

    
9230
        chdir("/");
9231
        TFR(fd = open("/dev/null", O_RDWR));
9232
        if (fd == -1)
9233
            exit(1);
9234

    
9235
        dup2(fd, 0);
9236
        dup2(fd, 1);
9237
        dup2(fd, 2);
9238

    
9239
        close(fd);
9240
    }
9241

    
9242
    main_loop();
9243
    quit_timers();
9244

    
9245
#if !defined(_WIN32)
9246
    /* close network clients */
9247
    for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) {
9248
        VLANClientState *vc;
9249

    
9250
        for(vc = vlan->first_client; vc != NULL; vc = vc->next) {
9251
            if (vc->fd_read == tap_receive) {
9252
                char ifname[64];
9253
                TAPState *s = vc->opaque;
9254

    
9255
                if (sscanf(vc->info_str, "tap: ifname=%63s ", ifname) == 1 &&
9256
                    s->down_script[0])
9257
                    launch_script(s->down_script, ifname, s->fd);
9258
            }
9259
#if defined(CONFIG_VDE)
9260
            if (vc->fd_read == vde_from_qemu) {
9261
                VDEState *s = vc->opaque;
9262
                vde_close(s->vde);
9263
            }
9264
#endif
9265
        }
9266
    }
9267
#endif
9268
    return 0;
9269
}