Statistics
| Branch: | Revision:

root / vl.c @ bcfad70f

History | View | Annotate | Download (239 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(CONFIG_VDE)
113
#include <libvdeplug.h>
114
#endif
115

    
116
#ifdef _WIN32
117
#include <malloc.h>
118
#include <sys/timeb.h>
119
#include <mmsystem.h>
120
#define getopt_long_only getopt_long
121
#define memalign(align, size) malloc(size)
122
#endif
123

    
124
#include "qemu_socket.h"
125

    
126
#ifdef CONFIG_SDL
127
#ifdef __APPLE__
128
#include <SDL/SDL.h>
129
#endif
130
#endif /* CONFIG_SDL */
131

    
132
#ifdef CONFIG_COCOA
133
#undef main
134
#define main qemu_main
135
#endif /* CONFIG_COCOA */
136

    
137
#include "disas.h"
138

    
139
#include "exec-all.h"
140

    
141
#define DEFAULT_NETWORK_SCRIPT "/etc/qemu-ifup"
142
#define DEFAULT_NETWORK_DOWN_SCRIPT "/etc/qemu-ifdown"
143
#ifdef __sun__
144
#define SMBD_COMMAND "/usr/sfw/sbin/smbd"
145
#else
146
#define SMBD_COMMAND "/usr/sbin/smbd"
147
#endif
148

    
149
//#define DEBUG_UNUSED_IOPORT
150
//#define DEBUG_IOPORT
151

    
152
#ifdef TARGET_PPC
153
#define DEFAULT_RAM_SIZE 144
154
#else
155
#define DEFAULT_RAM_SIZE 128
156
#endif
157
/* in ms */
158
#define GUI_REFRESH_INTERVAL 30
159

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

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

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

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

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

    
260
/***********************************************************/
261
/* x86 ISA bus support */
262

    
263
target_phys_addr_t isa_mem_base = 0;
264
PicState2 *isa_pic;
265

    
266
static IOPortReadFunc default_ioport_readb, default_ioport_readw, default_ioport_readl;
267
static IOPortWriteFunc default_ioport_writeb, default_ioport_writew, default_ioport_writel;
268

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

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

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

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

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

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

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

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

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

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

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

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

    
392
void isa_unassign_ioport(int start, int length)
393
{
394
    int i;
395

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

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

    
407
/***********************************************************/
408

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

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

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

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

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

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

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

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

    
515
/***********************************************************/
516
/* keyboard/mouse */
517

    
518
static QEMUPutKBDEvent *qemu_put_kbd_event;
519
static void *qemu_put_kbd_event_opaque;
520
static QEMUPutMouseEntry *qemu_put_mouse_event_head;
521
static QEMUPutMouseEntry *qemu_put_mouse_event_current;
522

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

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

    
535
    s = qemu_mallocz(sizeof(QEMUPutMouseEntry));
536
    if (!s)
537
        return NULL;
538

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

    
545
    if (!qemu_put_mouse_event_head) {
546
        qemu_put_mouse_event_head = qemu_put_mouse_event_current = s;
547
        return s;
548
    }
549

    
550
    cursor = qemu_put_mouse_event_head;
551
    while (cursor->next != NULL)
552
        cursor = cursor->next;
553

    
554
    cursor->next = s;
555
    qemu_put_mouse_event_current = s;
556

    
557
    return s;
558
}
559

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

    
564
    if (!qemu_put_mouse_event_head || entry == NULL)
565
        return;
566

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

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

    
584
    prev->next = entry->next;
585

    
586
    if (qemu_put_mouse_event_current == entry)
587
        qemu_put_mouse_event_current = prev;
588

    
589
    qemu_free(entry->qemu_put_mouse_event_name);
590
    qemu_free(entry);
591
}
592

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

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

    
606
    if (!qemu_put_mouse_event_current) {
607
        return;
608
    }
609

    
610
    mouse_event =
611
        qemu_put_mouse_event_current->qemu_put_mouse_event;
612
    mouse_event_opaque =
613
        qemu_put_mouse_event_current->qemu_put_mouse_event_opaque;
614

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

    
629
int kbd_mouse_is_absolute(void)
630
{
631
    if (!qemu_put_mouse_event_current)
632
        return 0;
633

    
634
    return qemu_put_mouse_event_current->qemu_put_mouse_event_absolute;
635
}
636

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

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

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

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

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

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

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

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

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

    
704
/***********************************************************/
705
/* real time host monotonic timer */
706

    
707
#define QEMU_TIMER_BASE 1000000000LL
708

    
709
#ifdef WIN32
710

    
711
static int64_t clock_freq;
712

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

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

    
732
#else
733

    
734
static int use_rt_clock;
735

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

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

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

    
782
/***********************************************************/
783
/* guest cycle counter */
784

    
785
static int64_t cpu_ticks_prev;
786
static int64_t cpu_ticks_offset;
787
static int64_t cpu_clock_offset;
788
static int cpu_ticks_enabled;
789

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

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

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

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

    
844
/***********************************************************/
845
/* timers */
846

    
847
#define QEMU_TIMER_REALTIME 0
848
#define QEMU_TIMER_VIRTUAL  1
849

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

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

    
863
struct qemu_alarm_timer {
864
    char const *name;
865
    unsigned int flags;
866

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

    
873
#define ALARM_FLAG_DYNTICKS  0x1
874
#define ALARM_FLAG_EXPIRED   0x2
875

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

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

    
886
    t->rearm(t);
887
}
888

    
889
/* TODO: MIN_TIMER_REARM_US should be optimized */
890
#define MIN_TIMER_REARM_US 250
891

    
892
static struct qemu_alarm_timer *alarm_timer;
893

    
894
#ifdef _WIN32
895

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

    
902
static int win32_start_timer(struct qemu_alarm_timer *t);
903
static void win32_stop_timer(struct qemu_alarm_timer *t);
904
static void win32_rearm_timer(struct qemu_alarm_timer *t);
905

    
906
#else
907

    
908
static int unix_start_timer(struct qemu_alarm_timer *t);
909
static void unix_stop_timer(struct qemu_alarm_timer *t);
910

    
911
#ifdef __linux__
912

    
913
static int dynticks_start_timer(struct qemu_alarm_timer *t);
914
static void dynticks_stop_timer(struct qemu_alarm_timer *t);
915
static void dynticks_rearm_timer(struct qemu_alarm_timer *t);
916

    
917
static int hpet_start_timer(struct qemu_alarm_timer *t);
918
static void hpet_stop_timer(struct qemu_alarm_timer *t);
919

    
920
static int rtc_start_timer(struct qemu_alarm_timer *t);
921
static void rtc_stop_timer(struct qemu_alarm_timer *t);
922

    
923
#endif /* __linux__ */
924

    
925
#endif /* _WIN32 */
926

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

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

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

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

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

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

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

    
1012
static void show_available_alarms(void)
1013
{
1014
    int i;
1015

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

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

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

    
1035
    arg = strdup(opt);
1036

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

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

    
1050
        if (i < cur)
1051
            /* Ignore */
1052
            goto next;
1053

    
1054
        /* Swap */
1055
        tmp = alarm_timers[i];
1056
        alarm_timers[i] = alarm_timers[cur];
1057
        alarm_timers[cur] = tmp;
1058

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

    
1064
    free(arg);
1065

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

    
1076
QEMUClock *rt_clock;
1077
QEMUClock *vm_clock;
1078

    
1079
static QEMUTimer *active_timers[2];
1080

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

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

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

    
1102
void qemu_free_timer(QEMUTimer *ts)
1103
{
1104
    qemu_free(ts);
1105
}
1106

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

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

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

    
1133
    qemu_del_timer(ts);
1134

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
1318
        alarm_timer->flags |= ALARM_FLAG_EXPIRED;
1319

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

    
1333
static int64_t qemu_next_deadline(void)
1334
{
1335
    int64_t delta;
1336

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

    
1345
    if (delta < 0)
1346
        delta = 0;
1347

    
1348
    return delta;
1349
}
1350

    
1351
static uint64_t qemu_next_deadline_dyntick(void)
1352
{
1353
    int64_t delta;
1354
    int64_t rtdelta;
1355

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

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

    
1368
    if (delta < MIN_TIMER_REARM_US)
1369
        delta = MIN_TIMER_REARM_US;
1370

    
1371
    return delta;
1372
}
1373

    
1374
#ifndef _WIN32
1375

    
1376
#if defined(__linux__)
1377

    
1378
#define RTC_FREQ 1024
1379

    
1380
static void enable_sigio_timer(int fd)
1381
{
1382
    struct sigaction act;
1383

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

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

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

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

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

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

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

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

    
1427
    enable_sigio_timer(fd);
1428
    t->priv = (void *)(long)fd;
1429

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

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

    
1440
    close(fd);
1441
}
1442

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

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

    
1465
    enable_sigio_timer(rtc_fd);
1466

    
1467
    t->priv = (void *)(long)rtc_fd;
1468

    
1469
    return 0;
1470
}
1471

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

    
1476
    close(rtc_fd);
1477
}
1478

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

    
1485
    sigfillset(&act.sa_mask);
1486
    act.sa_flags = 0;
1487
    act.sa_handler = host_alarm_handler;
1488

    
1489
    sigaction(SIGALRM, &act, NULL);
1490

    
1491
    ev.sigev_value.sival_int = 0;
1492
    ev.sigev_notify = SIGEV_SIGNAL;
1493
    ev.sigev_signo = SIGALRM;
1494

    
1495
    if (timer_create(CLOCK_REALTIME, &ev, &host_timer)) {
1496
        perror("timer_create");
1497

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

    
1501
        return -1;
1502
    }
1503

    
1504
    t->priv = (void *)host_timer;
1505

    
1506
    return 0;
1507
}
1508

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

    
1513
    timer_delete(host_timer);
1514
}
1515

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

    
1523
    if (!active_timers[QEMU_TIMER_REALTIME] &&
1524
                !active_timers[QEMU_TIMER_VIRTUAL])
1525
        return;
1526

    
1527
    nearest_delta_us = qemu_next_deadline_dyntick();
1528

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

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

    
1550
#endif /* defined(__linux__) */
1551

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

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

    
1563
    sigaction(SIGALRM, &act, NULL);
1564

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

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

    
1575
    return 0;
1576
}
1577

    
1578
static void unix_stop_timer(struct qemu_alarm_timer *t)
1579
{
1580
    struct itimerval itv;
1581

    
1582
    memset(&itv, 0, sizeof(itv));
1583
    setitimer(ITIMER_REAL, &itv, NULL);
1584
}
1585

    
1586
#endif /* !defined(_WIN32) */
1587

    
1588
#ifdef _WIN32
1589

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

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

    
1602
    memset(&tc, 0, sizeof(tc));
1603
    timeGetDevCaps(&tc, sizeof(tc));
1604

    
1605
    if (data->period < tc.wPeriodMin)
1606
        data->period = tc.wPeriodMin;
1607

    
1608
    timeBeginPeriod(data->period);
1609

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

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

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

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

    
1630
    qemu_add_wait_object(data->host_alarm, NULL, NULL);
1631

    
1632
    return 0;
1633
}
1634

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

    
1639
    timeKillEvent(data->timerId);
1640
    timeEndPeriod(data->period);
1641

    
1642
    CloseHandle(data->host_alarm);
1643
}
1644

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

    
1650
    if (!active_timers[QEMU_TIMER_REALTIME] &&
1651
                !active_timers[QEMU_TIMER_VIRTUAL])
1652
        return;
1653

    
1654
    nearest_delta_us = qemu_next_deadline_dyntick();
1655
    nearest_delta_us /= 1000;
1656

    
1657
    timeKillEvent(data->timerId);
1658

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

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

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

    
1674
#endif /* _WIN32 */
1675

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

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

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

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

    
1695
    alarm_timer = t;
1696
}
1697

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

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

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

    
1723
    memcpy(tm, ret, sizeof(struct tm));
1724
}
1725

    
1726
int qemu_timedate_diff(struct tm *tm)
1727
{
1728
    time_t seconds;
1729

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

    
1738
    return seconds - time(NULL);
1739
}
1740

    
1741
/***********************************************************/
1742
/* character device */
1743

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

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

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

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

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

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

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

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

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

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

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

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

    
1832
static CharDriverState *qemu_chr_open_null(void)
1833
{
1834
    CharDriverState *chr;
1835

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

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

    
1863

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

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

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

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

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

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

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

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

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

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

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

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

    
2017
    mux_chr_accept_input (opaque);
2018

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

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

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

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

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

    
2063
static CharDriverState *qemu_chr_open_mux(CharDriverState *drv)
2064
{
2065
    CharDriverState *chr;
2066
    MuxDriver *d;
2067

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

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

    
2086

    
2087
#ifdef _WIN32
2088

    
2089
static void socket_cleanup(void)
2090
{
2091
    WSACleanup();
2092
}
2093

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

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

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

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

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

    
2138
#else
2139

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

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

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

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

    
2173
#ifndef _WIN32
2174

    
2175
typedef struct {
2176
    int fd_in, fd_out;
2177
    int max_size;
2178
} FDCharDriver;
2179

    
2180
#define STDIO_MAX_CLIENTS 1
2181
static int stdio_nb_clients = 0;
2182

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

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

    
2194
    s->max_size = qemu_chr_can_read(chr);
2195
    return s->max_size;
2196
}
2197

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

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

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

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

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

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

    
2245
    qemu_free(s);
2246
}
2247

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

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

    
2269
    qemu_chr_reset(chr);
2270

    
2271
    return chr;
2272
}
2273

    
2274
static CharDriverState *qemu_chr_open_file_out(const char *file_out)
2275
{
2276
    int fd_out;
2277

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

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

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

    
2305

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

    
2309
#define TERM_FIFO_MAX_SIZE 1
2310

    
2311
static uint8_t term_fifo[TERM_FIFO_MAX_SIZE];
2312
static int term_fifo_size;
2313

    
2314
static int stdio_read_poll(void *opaque)
2315
{
2316
    CharDriverState *chr = opaque;
2317

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

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

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

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

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

    
2362
static void term_init(void)
2363
{
2364
    struct termios tty;
2365

    
2366
    tcgetattr (0, &tty);
2367
    oldtty = tty;
2368
    old_fd0_flags = fcntl(0, F_GETFL);
2369

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

    
2382
    tcsetattr (0, TCSANOW, &tty);
2383

    
2384
    if (!term_atexit_done++)
2385
        atexit(term_exit);
2386

    
2387
    fcntl(0, F_SETFL, O_NONBLOCK);
2388
}
2389

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

    
2398
static CharDriverState *qemu_chr_open_stdio(void)
2399
{
2400
    CharDriverState *chr;
2401

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

    
2410
    return chr;
2411
}
2412

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

    
2421
        *amaster = *aslave = -1;
2422

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

    
2427
        if (grantpt(mfd) == -1 || unlockpt(mfd) == -1)
2428
                goto err;
2429

    
2430
        if ((slave = ptsname(mfd)) == NULL)
2431
                goto err;
2432

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

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

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

    
2447
        return 0;
2448

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

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

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

    
2470
#if defined(__linux__) || defined(__sun__)
2471

    
2472
typedef struct {
2473
    int fd;
2474
    int connected;
2475
    int polling;
2476
    int read_bytes;
2477
    QEMUTimer *timer;
2478
} PtyCharDriver;
2479

    
2480
static void pty_chr_update_read_handler(CharDriverState *chr);
2481
static void pty_chr_state(CharDriverState *chr, int connected);
2482

    
2483
static int pty_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
2484
{
2485
    PtyCharDriver *s = chr->opaque;
2486

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

    
2495
static int pty_chr_read_poll(void *opaque)
2496
{
2497
    CharDriverState *chr = opaque;
2498
    PtyCharDriver *s = chr->opaque;
2499

    
2500
    s->read_bytes = qemu_chr_can_read(chr);
2501
    return s->read_bytes;
2502
}
2503

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

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

    
2528
static void pty_chr_update_read_handler(CharDriverState *chr)
2529
{
2530
    PtyCharDriver *s = chr->opaque;
2531

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

    
2546
static void pty_chr_state(CharDriverState *chr, int connected)
2547
{
2548
    PtyCharDriver *s = chr->opaque;
2549

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

    
2565
static void pty_chr_timer(void *opaque)
2566
{
2567
    struct CharDriverState *chr = opaque;
2568
    PtyCharDriver *s = chr->opaque;
2569

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

    
2579
    /* Next poll ... */
2580
    pty_chr_update_read_handler(chr);
2581
}
2582

    
2583
static void pty_chr_close(struct CharDriverState *chr)
2584
{
2585
    PtyCharDriver *s = chr->opaque;
2586

    
2587
    qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
2588
    close(s->fd);
2589
    qemu_free(s);
2590
}
2591

    
2592
static CharDriverState *qemu_chr_open_pty(void)
2593
{
2594
    CharDriverState *chr;
2595
    PtyCharDriver *s;
2596
    struct termios tty;
2597
    int slave_fd;
2598

    
2599
    chr = qemu_mallocz(sizeof(CharDriverState));
2600
    if (!chr)
2601
        return NULL;
2602
    s = qemu_mallocz(sizeof(PtyCharDriver));
2603
    if (!s) {
2604
        qemu_free(chr);
2605
        return NULL;
2606
    }
2607

    
2608
    if (openpty(&s->fd, &slave_fd, NULL, NULL, NULL) < 0) {
2609
        return NULL;
2610
    }
2611

    
2612
    /* Set raw attributes on the pty. */
2613
    cfmakeraw(&tty);
2614
    tcsetattr(slave_fd, TCSAFLUSH, &tty);
2615
    close(slave_fd);
2616

    
2617
    fprintf(stderr, "char device redirected to %s\n", ptsname(s->fd));
2618

    
2619
    chr->opaque = s;
2620
    chr->chr_write = pty_chr_write;
2621
    chr->chr_update_read_handler = pty_chr_update_read_handler;
2622
    chr->chr_close = pty_chr_close;
2623

    
2624
    s->timer = qemu_new_timer(rt_clock, pty_chr_timer, chr);
2625

    
2626
    return chr;
2627
}
2628

    
2629
static void tty_serial_init(int fd, int speed,
2630
                            int parity, int data_bits, int stop_bits)
2631
{
2632
    struct termios tty;
2633
    speed_t spd;
2634

    
2635
#if 0
2636
    printf("tty_serial_init: speed=%d parity=%c data=%d stop=%d\n",
2637
           speed, parity, data_bits, stop_bits);
2638
#endif
2639
    tcgetattr (fd, &tty);
2640

    
2641
#define MARGIN 1.1
2642
    if (speed <= 50 * MARGIN)
2643
        spd = B50;
2644
    else if (speed <= 75 * MARGIN)
2645
        spd = B75;
2646
    else if (speed <= 300 * MARGIN)
2647
        spd = B300;
2648
    else if (speed <= 600 * MARGIN)
2649
        spd = B600;
2650
    else if (speed <= 1200 * MARGIN)
2651
        spd = B1200;
2652
    else if (speed <= 2400 * MARGIN)
2653
        spd = B2400;
2654
    else if (speed <= 4800 * MARGIN)
2655
        spd = B4800;
2656
    else if (speed <= 9600 * MARGIN)
2657
        spd = B9600;
2658
    else if (speed <= 19200 * MARGIN)
2659
        spd = B19200;
2660
    else if (speed <= 38400 * MARGIN)
2661
        spd = B38400;
2662
    else if (speed <= 57600 * MARGIN)
2663
        spd = B57600;
2664
    else if (speed <= 115200 * MARGIN)
2665
        spd = B115200;
2666
    else
2667
        spd = B115200;
2668

    
2669
    cfsetispeed(&tty, spd);
2670
    cfsetospeed(&tty, spd);
2671

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

    
2706
    tcsetattr (fd, TCSANOW, &tty);
2707
}
2708

    
2709
static int tty_serial_ioctl(CharDriverState *chr, int cmd, void *arg)
2710
{
2711
    FDCharDriver *s = chr->opaque;
2712

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

    
2765
static CharDriverState *qemu_chr_open_tty(const char *filename)
2766
{
2767
    CharDriverState *chr;
2768
    int fd;
2769

    
2770
    TFR(fd = open(filename, O_RDWR | O_NONBLOCK));
2771
    tty_serial_init(fd, 115200, 'N', 8, 1);
2772
    chr = qemu_chr_open_fd(fd, fd);
2773
    if (!chr) {
2774
        close(fd);
2775
        return NULL;
2776
    }
2777
    chr->chr_ioctl = tty_serial_ioctl;
2778
    qemu_chr_reset(chr);
2779
    return chr;
2780
}
2781
#else  /* ! __linux__ && ! __sun__ */
2782
static CharDriverState *qemu_chr_open_pty(void)
2783
{
2784
    return NULL;
2785
}
2786
#endif /* __linux__ || __sun__ */
2787

    
2788
#if defined(__linux__)
2789
typedef struct {
2790
    int fd;
2791
    int mode;
2792
} ParallelCharDriver;
2793

    
2794
static int pp_hw_mode(ParallelCharDriver *s, uint16_t mode)
2795
{
2796
    if (s->mode != mode) {
2797
        int m = mode;
2798
        if (ioctl(s->fd, PPSETMODE, &m) < 0)
2799
            return 0;
2800
        s->mode = mode;
2801
    }
2802
    return 1;
2803
}
2804

    
2805
static int pp_ioctl(CharDriverState *chr, int cmd, void *arg)
2806
{
2807
    ParallelCharDriver *drv = chr->opaque;
2808
    int fd = drv->fd;
2809
    uint8_t b;
2810

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

    
2882
static void pp_close(CharDriverState *chr)
2883
{
2884
    ParallelCharDriver *drv = chr->opaque;
2885
    int fd = drv->fd;
2886

    
2887
    pp_hw_mode(drv, IEEE1284_MODE_COMPAT);
2888
    ioctl(fd, PPRELEASE);
2889
    close(fd);
2890
    qemu_free(drv);
2891
}
2892

    
2893
static CharDriverState *qemu_chr_open_pp(const char *filename)
2894
{
2895
    CharDriverState *chr;
2896
    ParallelCharDriver *drv;
2897
    int fd;
2898

    
2899
    TFR(fd = open(filename, O_RDWR));
2900
    if (fd < 0)
2901
        return NULL;
2902

    
2903
    if (ioctl(fd, PPCLAIM) < 0) {
2904
        close(fd);
2905
        return NULL;
2906
    }
2907

    
2908
    drv = qemu_mallocz(sizeof(ParallelCharDriver));
2909
    if (!drv) {
2910
        close(fd);
2911
        return NULL;
2912
    }
2913
    drv->fd = fd;
2914
    drv->mode = IEEE1284_MODE_COMPAT;
2915

    
2916
    chr = qemu_mallocz(sizeof(CharDriverState));
2917
    if (!chr) {
2918
        qemu_free(drv);
2919
        close(fd);
2920
        return NULL;
2921
    }
2922
    chr->chr_write = null_chr_write;
2923
    chr->chr_ioctl = pp_ioctl;
2924
    chr->chr_close = pp_close;
2925
    chr->opaque = drv;
2926

    
2927
    qemu_chr_reset(chr);
2928

    
2929
    return chr;
2930
}
2931
#endif /* __linux__ */
2932

    
2933
#else /* _WIN32 */
2934

    
2935
typedef struct {
2936
    int max_size;
2937
    HANDLE hcom, hrecv, hsend;
2938
    OVERLAPPED orecv, osend;
2939
    BOOL fpipe;
2940
    DWORD len;
2941
} WinCharState;
2942

    
2943
#define NSENDBUF 2048
2944
#define NRECVBUF 2048
2945
#define MAXCONNECT 1
2946
#define NTIMEOUT 5000
2947

    
2948
static int win_chr_poll(void *opaque);
2949
static int win_chr_pipe_poll(void *opaque);
2950

    
2951
static void win_chr_close(CharDriverState *chr)
2952
{
2953
    WinCharState *s = chr->opaque;
2954

    
2955
    if (s->hsend) {
2956
        CloseHandle(s->hsend);
2957
        s->hsend = NULL;
2958
    }
2959
    if (s->hrecv) {
2960
        CloseHandle(s->hrecv);
2961
        s->hrecv = NULL;
2962
    }
2963
    if (s->hcom) {
2964
        CloseHandle(s->hcom);
2965
        s->hcom = NULL;
2966
    }
2967
    if (s->fpipe)
2968
        qemu_del_polling_cb(win_chr_pipe_poll, chr);
2969
    else
2970
        qemu_del_polling_cb(win_chr_poll, chr);
2971
}
2972

    
2973
static int win_chr_init(CharDriverState *chr, const char *filename)
2974
{
2975
    WinCharState *s = chr->opaque;
2976
    COMMCONFIG comcfg;
2977
    COMMTIMEOUTS cto = { 0, 0, 0, 0, 0};
2978
    COMSTAT comstat;
2979
    DWORD size;
2980
    DWORD err;
2981

    
2982
    s->hsend = CreateEvent(NULL, TRUE, FALSE, NULL);
2983
    if (!s->hsend) {
2984
        fprintf(stderr, "Failed CreateEvent\n");
2985
        goto fail;
2986
    }
2987
    s->hrecv = CreateEvent(NULL, TRUE, FALSE, NULL);
2988
    if (!s->hrecv) {
2989
        fprintf(stderr, "Failed CreateEvent\n");
2990
        goto fail;
2991
    }
2992

    
2993
    s->hcom = CreateFile(filename, GENERIC_READ|GENERIC_WRITE, 0, NULL,
2994
                      OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
2995
    if (s->hcom == INVALID_HANDLE_VALUE) {
2996
        fprintf(stderr, "Failed CreateFile (%lu)\n", GetLastError());
2997
        s->hcom = NULL;
2998
        goto fail;
2999
    }
3000

    
3001
    if (!SetupComm(s->hcom, NRECVBUF, NSENDBUF)) {
3002
        fprintf(stderr, "Failed SetupComm\n");
3003
        goto fail;
3004
    }
3005

    
3006
    ZeroMemory(&comcfg, sizeof(COMMCONFIG));
3007
    size = sizeof(COMMCONFIG);
3008
    GetDefaultCommConfig(filename, &comcfg, &size);
3009
    comcfg.dcb.DCBlength = sizeof(DCB);
3010
    CommConfigDialog(filename, NULL, &comcfg);
3011

    
3012
    if (!SetCommState(s->hcom, &comcfg.dcb)) {
3013
        fprintf(stderr, "Failed SetCommState\n");
3014
        goto fail;
3015
    }
3016

    
3017
    if (!SetCommMask(s->hcom, EV_ERR)) {
3018
        fprintf(stderr, "Failed SetCommMask\n");
3019
        goto fail;
3020
    }
3021

    
3022
    cto.ReadIntervalTimeout = MAXDWORD;
3023
    if (!SetCommTimeouts(s->hcom, &cto)) {
3024
        fprintf(stderr, "Failed SetCommTimeouts\n");
3025
        goto fail;
3026
    }
3027

    
3028
    if (!ClearCommError(s->hcom, &err, &comstat)) {
3029
        fprintf(stderr, "Failed ClearCommError\n");
3030
        goto fail;
3031
    }
3032
    qemu_add_polling_cb(win_chr_poll, chr);
3033
    return 0;
3034

    
3035
 fail:
3036
    win_chr_close(chr);
3037
    return -1;
3038
}
3039

    
3040
static int win_chr_write(CharDriverState *chr, const uint8_t *buf, int len1)
3041
{
3042
    WinCharState *s = chr->opaque;
3043
    DWORD len, ret, size, err;
3044

    
3045
    len = len1;
3046
    ZeroMemory(&s->osend, sizeof(s->osend));
3047
    s->osend.hEvent = s->hsend;
3048
    while (len > 0) {
3049
        if (s->hsend)
3050
            ret = WriteFile(s->hcom, buf, len, &size, &s->osend);
3051
        else
3052
            ret = WriteFile(s->hcom, buf, len, &size, NULL);
3053
        if (!ret) {
3054
            err = GetLastError();
3055
            if (err == ERROR_IO_PENDING) {
3056
                ret = GetOverlappedResult(s->hcom, &s->osend, &size, TRUE);
3057
                if (ret) {
3058
                    buf += size;
3059
                    len -= size;
3060
                } else {
3061
                    break;
3062
                }
3063
            } else {
3064
                break;
3065
            }
3066
        } else {
3067
            buf += size;
3068
            len -= size;
3069
        }
3070
    }
3071
    return len1 - len;
3072
}
3073

    
3074
static int win_chr_read_poll(CharDriverState *chr)
3075
{
3076
    WinCharState *s = chr->opaque;
3077

    
3078
    s->max_size = qemu_chr_can_read(chr);
3079
    return s->max_size;
3080
}
3081

    
3082
static void win_chr_readfile(CharDriverState *chr)
3083
{
3084
    WinCharState *s = chr->opaque;
3085
    int ret, err;
3086
    uint8_t buf[1024];
3087
    DWORD size;
3088

    
3089
    ZeroMemory(&s->orecv, sizeof(s->orecv));
3090
    s->orecv.hEvent = s->hrecv;
3091
    ret = ReadFile(s->hcom, buf, s->len, &size, &s->orecv);
3092
    if (!ret) {
3093
        err = GetLastError();
3094
        if (err == ERROR_IO_PENDING) {
3095
            ret = GetOverlappedResult(s->hcom, &s->orecv, &size, TRUE);
3096
        }
3097
    }
3098

    
3099
    if (size > 0) {
3100
        qemu_chr_read(chr, buf, size);
3101
    }
3102
}
3103

    
3104
static void win_chr_read(CharDriverState *chr)
3105
{
3106
    WinCharState *s = chr->opaque;
3107

    
3108
    if (s->len > s->max_size)
3109
        s->len = s->max_size;
3110
    if (s->len == 0)
3111
        return;
3112

    
3113
    win_chr_readfile(chr);
3114
}
3115

    
3116
static int win_chr_poll(void *opaque)
3117
{
3118
    CharDriverState *chr = opaque;
3119
    WinCharState *s = chr->opaque;
3120
    COMSTAT status;
3121
    DWORD comerr;
3122

    
3123
    ClearCommError(s->hcom, &comerr, &status);
3124
    if (status.cbInQue > 0) {
3125
        s->len = status.cbInQue;
3126
        win_chr_read_poll(chr);
3127
        win_chr_read(chr);
3128
        return 1;
3129
    }
3130
    return 0;
3131
}
3132

    
3133
static CharDriverState *qemu_chr_open_win(const char *filename)
3134
{
3135
    CharDriverState *chr;
3136
    WinCharState *s;
3137

    
3138
    chr = qemu_mallocz(sizeof(CharDriverState));
3139
    if (!chr)
3140
        return NULL;
3141
    s = qemu_mallocz(sizeof(WinCharState));
3142
    if (!s) {
3143
        free(chr);
3144
        return NULL;
3145
    }
3146
    chr->opaque = s;
3147
    chr->chr_write = win_chr_write;
3148
    chr->chr_close = win_chr_close;
3149

    
3150
    if (win_chr_init(chr, filename) < 0) {
3151
        free(s);
3152
        free(chr);
3153
        return NULL;
3154
    }
3155
    qemu_chr_reset(chr);
3156
    return chr;
3157
}
3158

    
3159
static int win_chr_pipe_poll(void *opaque)
3160
{
3161
    CharDriverState *chr = opaque;
3162
    WinCharState *s = chr->opaque;
3163
    DWORD size;
3164

    
3165
    PeekNamedPipe(s->hcom, NULL, 0, NULL, &size, NULL);
3166
    if (size > 0) {
3167
        s->len = size;
3168
        win_chr_read_poll(chr);
3169
        win_chr_read(chr);
3170
        return 1;
3171
    }
3172
    return 0;
3173
}
3174

    
3175
static int win_chr_pipe_init(CharDriverState *chr, const char *filename)
3176
{
3177
    WinCharState *s = chr->opaque;
3178
    OVERLAPPED ov;
3179
    int ret;
3180
    DWORD size;
3181
    char openname[256];
3182

    
3183
    s->fpipe = TRUE;
3184

    
3185
    s->hsend = CreateEvent(NULL, TRUE, FALSE, NULL);
3186
    if (!s->hsend) {
3187
        fprintf(stderr, "Failed CreateEvent\n");
3188
        goto fail;
3189
    }
3190
    s->hrecv = CreateEvent(NULL, TRUE, FALSE, NULL);
3191
    if (!s->hrecv) {
3192
        fprintf(stderr, "Failed CreateEvent\n");
3193
        goto fail;
3194
    }
3195

    
3196
    snprintf(openname, sizeof(openname), "\\\\.\\pipe\\%s", filename);
3197
    s->hcom = CreateNamedPipe(openname, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
3198
                              PIPE_TYPE_BYTE | PIPE_READMODE_BYTE |
3199
                              PIPE_WAIT,
3200
                              MAXCONNECT, NSENDBUF, NRECVBUF, NTIMEOUT, NULL);
3201
    if (s->hcom == INVALID_HANDLE_VALUE) {
3202
        fprintf(stderr, "Failed CreateNamedPipe (%lu)\n", GetLastError());
3203
        s->hcom = NULL;
3204
        goto fail;
3205
    }
3206

    
3207
    ZeroMemory(&ov, sizeof(ov));
3208
    ov.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
3209
    ret = ConnectNamedPipe(s->hcom, &ov);
3210
    if (ret) {
3211
        fprintf(stderr, "Failed ConnectNamedPipe\n");
3212
        goto fail;
3213
    }
3214

    
3215
    ret = GetOverlappedResult(s->hcom, &ov, &size, TRUE);
3216
    if (!ret) {
3217
        fprintf(stderr, "Failed GetOverlappedResult\n");
3218
        if (ov.hEvent) {
3219
            CloseHandle(ov.hEvent);
3220
            ov.hEvent = NULL;
3221
        }
3222
        goto fail;
3223
    }
3224

    
3225
    if (ov.hEvent) {
3226
        CloseHandle(ov.hEvent);
3227
        ov.hEvent = NULL;
3228
    }
3229
    qemu_add_polling_cb(win_chr_pipe_poll, chr);
3230
    return 0;
3231

    
3232
 fail:
3233
    win_chr_close(chr);
3234
    return -1;
3235
}
3236

    
3237

    
3238
static CharDriverState *qemu_chr_open_win_pipe(const char *filename)
3239
{
3240
    CharDriverState *chr;
3241
    WinCharState *s;
3242

    
3243
    chr = qemu_mallocz(sizeof(CharDriverState));
3244
    if (!chr)
3245
        return NULL;
3246
    s = qemu_mallocz(sizeof(WinCharState));
3247
    if (!s) {
3248
        free(chr);
3249
        return NULL;
3250
    }
3251
    chr->opaque = s;
3252
    chr->chr_write = win_chr_write;
3253
    chr->chr_close = win_chr_close;
3254

    
3255
    if (win_chr_pipe_init(chr, filename) < 0) {
3256
        free(s);
3257
        free(chr);
3258
        return NULL;
3259
    }
3260
    qemu_chr_reset(chr);
3261
    return chr;
3262
}
3263

    
3264
static CharDriverState *qemu_chr_open_win_file(HANDLE fd_out)
3265
{
3266
    CharDriverState *chr;
3267
    WinCharState *s;
3268

    
3269
    chr = qemu_mallocz(sizeof(CharDriverState));
3270
    if (!chr)
3271
        return NULL;
3272
    s = qemu_mallocz(sizeof(WinCharState));
3273
    if (!s) {
3274
        free(chr);
3275
        return NULL;
3276
    }
3277
    s->hcom = fd_out;
3278
    chr->opaque = s;
3279
    chr->chr_write = win_chr_write;
3280
    qemu_chr_reset(chr);
3281
    return chr;
3282
}
3283

    
3284
static CharDriverState *qemu_chr_open_win_con(const char *filename)
3285
{
3286
    return qemu_chr_open_win_file(GetStdHandle(STD_OUTPUT_HANDLE));
3287
}
3288

    
3289
static CharDriverState *qemu_chr_open_win_file_out(const char *file_out)
3290
{
3291
    HANDLE fd_out;
3292

    
3293
    fd_out = CreateFile(file_out, GENERIC_WRITE, FILE_SHARE_READ, NULL,
3294
                        OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
3295
    if (fd_out == INVALID_HANDLE_VALUE)
3296
        return NULL;
3297

    
3298
    return qemu_chr_open_win_file(fd_out);
3299
}
3300
#endif /* !_WIN32 */
3301

    
3302
/***********************************************************/
3303
/* UDP Net console */
3304

    
3305
typedef struct {
3306
    int fd;
3307
    struct sockaddr_in daddr;
3308
    uint8_t buf[1024];
3309
    int bufcnt;
3310
    int bufptr;
3311
    int max_size;
3312
} NetCharDriver;
3313

    
3314
static int udp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
3315
{
3316
    NetCharDriver *s = chr->opaque;
3317

    
3318
    return sendto(s->fd, buf, len, 0,
3319
                  (struct sockaddr *)&s->daddr, sizeof(struct sockaddr_in));
3320
}
3321

    
3322
static int udp_chr_read_poll(void *opaque)
3323
{
3324
    CharDriverState *chr = opaque;
3325
    NetCharDriver *s = chr->opaque;
3326

    
3327
    s->max_size = qemu_chr_can_read(chr);
3328

    
3329
    /* If there were any stray characters in the queue process them
3330
     * first
3331
     */
3332
    while (s->max_size > 0 && s->bufptr < s->bufcnt) {
3333
        qemu_chr_read(chr, &s->buf[s->bufptr], 1);
3334
        s->bufptr++;
3335
        s->max_size = qemu_chr_can_read(chr);
3336
    }
3337
    return s->max_size;
3338
}
3339

    
3340
static void udp_chr_read(void *opaque)
3341
{
3342
    CharDriverState *chr = opaque;
3343
    NetCharDriver *s = chr->opaque;
3344

    
3345
    if (s->max_size == 0)
3346
        return;
3347
    s->bufcnt = recv(s->fd, s->buf, sizeof(s->buf), 0);
3348
    s->bufptr = s->bufcnt;
3349
    if (s->bufcnt <= 0)
3350
        return;
3351

    
3352
    s->bufptr = 0;
3353
    while (s->max_size > 0 && s->bufptr < s->bufcnt) {
3354
        qemu_chr_read(chr, &s->buf[s->bufptr], 1);
3355
        s->bufptr++;
3356
        s->max_size = qemu_chr_can_read(chr);
3357
    }
3358
}
3359

    
3360
static void udp_chr_update_read_handler(CharDriverState *chr)
3361
{
3362
    NetCharDriver *s = chr->opaque;
3363

    
3364
    if (s->fd >= 0) {
3365
        qemu_set_fd_handler2(s->fd, udp_chr_read_poll,
3366
                             udp_chr_read, NULL, chr);
3367
    }
3368
}
3369

    
3370
int parse_host_port(struct sockaddr_in *saddr, const char *str);
3371
#ifndef _WIN32
3372
static int parse_unix_path(struct sockaddr_un *uaddr, const char *str);
3373
#endif
3374
int parse_host_src_port(struct sockaddr_in *haddr,
3375
                        struct sockaddr_in *saddr,
3376
                        const char *str);
3377

    
3378
static CharDriverState *qemu_chr_open_udp(const char *def)
3379
{
3380
    CharDriverState *chr = NULL;
3381
    NetCharDriver *s = NULL;
3382
    int fd = -1;
3383
    struct sockaddr_in saddr;
3384

    
3385
    chr = qemu_mallocz(sizeof(CharDriverState));
3386
    if (!chr)
3387
        goto return_err;
3388
    s = qemu_mallocz(sizeof(NetCharDriver));
3389
    if (!s)
3390
        goto return_err;
3391

    
3392
    fd = socket(PF_INET, SOCK_DGRAM, 0);
3393
    if (fd < 0) {
3394
        perror("socket(PF_INET, SOCK_DGRAM)");
3395
        goto return_err;
3396
    }
3397

    
3398
    if (parse_host_src_port(&s->daddr, &saddr, def) < 0) {
3399
        printf("Could not parse: %s\n", def);
3400
        goto return_err;
3401
    }
3402

    
3403
    if (bind(fd, (struct sockaddr *)&saddr, sizeof(saddr)) < 0)
3404
    {
3405
        perror("bind");
3406
        goto return_err;
3407
    }
3408

    
3409
    s->fd = fd;
3410
    s->bufcnt = 0;
3411
    s->bufptr = 0;
3412
    chr->opaque = s;
3413
    chr->chr_write = udp_chr_write;
3414
    chr->chr_update_read_handler = udp_chr_update_read_handler;
3415
    return chr;
3416

    
3417
return_err:
3418
    if (chr)
3419
        free(chr);
3420
    if (s)
3421
        free(s);
3422
    if (fd >= 0)
3423
        closesocket(fd);
3424
    return NULL;
3425
}
3426

    
3427
/***********************************************************/
3428
/* TCP Net console */
3429

    
3430
typedef struct {
3431
    int fd, listen_fd;
3432
    int connected;
3433
    int max_size;
3434
    int do_telnetopt;
3435
    int do_nodelay;
3436
    int is_unix;
3437
} TCPCharDriver;
3438

    
3439
static void tcp_chr_accept(void *opaque);
3440

    
3441
static int tcp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
3442
{
3443
    TCPCharDriver *s = chr->opaque;
3444
    if (s->connected) {
3445
        return send_all(s->fd, buf, len);
3446
    } else {
3447
        /* XXX: indicate an error ? */
3448
        return len;
3449
    }
3450
}
3451

    
3452
static int tcp_chr_read_poll(void *opaque)
3453
{
3454
    CharDriverState *chr = opaque;
3455
    TCPCharDriver *s = chr->opaque;
3456
    if (!s->connected)
3457
        return 0;
3458
    s->max_size = qemu_chr_can_read(chr);
3459
    return s->max_size;
3460
}
3461

    
3462
#define IAC 255
3463
#define IAC_BREAK 243
3464
static void tcp_chr_process_IAC_bytes(CharDriverState *chr,
3465
                                      TCPCharDriver *s,
3466
                                      uint8_t *buf, int *size)
3467
{
3468
    /* Handle any telnet client's basic IAC options to satisfy char by
3469
     * char mode with no echo.  All IAC options will be removed from
3470
     * the buf and the do_telnetopt variable will be used to track the
3471
     * state of the width of the IAC information.
3472
     *
3473
     * IAC commands come in sets of 3 bytes with the exception of the
3474
     * "IAC BREAK" command and the double IAC.
3475
     */
3476

    
3477
    int i;
3478
    int j = 0;
3479

    
3480
    for (i = 0; i < *size; i++) {
3481
        if (s->do_telnetopt > 1) {
3482
            if ((unsigned char)buf[i] == IAC && s->do_telnetopt == 2) {
3483
                /* Double IAC means send an IAC */
3484
                if (j != i)
3485
                    buf[j] = buf[i];
3486
                j++;
3487
                s->do_telnetopt = 1;
3488
            } else {
3489
                if ((unsigned char)buf[i] == IAC_BREAK && s->do_telnetopt == 2) {
3490
                    /* Handle IAC break commands by sending a serial break */
3491
                    qemu_chr_event(chr, CHR_EVENT_BREAK);
3492
                    s->do_telnetopt++;
3493
                }
3494
                s->do_telnetopt++;
3495
            }
3496
            if (s->do_telnetopt >= 4) {
3497
                s->do_telnetopt = 1;
3498
            }
3499
        } else {
3500
            if ((unsigned char)buf[i] == IAC) {
3501
                s->do_telnetopt = 2;
3502
            } else {
3503
                if (j != i)
3504
                    buf[j] = buf[i];
3505
                j++;
3506
            }
3507
        }
3508
    }
3509
    *size = j;
3510
}
3511

    
3512
static void tcp_chr_read(void *opaque)
3513
{
3514
    CharDriverState *chr = opaque;
3515
    TCPCharDriver *s = chr->opaque;
3516
    uint8_t buf[1024];
3517
    int len, size;
3518

    
3519
    if (!s->connected || s->max_size <= 0)
3520
        return;
3521
    len = sizeof(buf);
3522
    if (len > s->max_size)
3523
        len = s->max_size;
3524
    size = recv(s->fd, buf, len, 0);
3525
    if (size == 0) {
3526
        /* connection closed */
3527
        s->connected = 0;
3528
        if (s->listen_fd >= 0) {
3529
            qemu_set_fd_handler(s->listen_fd, tcp_chr_accept, NULL, chr);
3530
        }
3531
        qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
3532
        closesocket(s->fd);
3533
        s->fd = -1;
3534
    } else if (size > 0) {
3535
        if (s->do_telnetopt)
3536
            tcp_chr_process_IAC_bytes(chr, s, buf, &size);
3537
        if (size > 0)
3538
            qemu_chr_read(chr, buf, size);
3539
    }
3540
}
3541

    
3542
static void tcp_chr_connect(void *opaque)
3543
{
3544
    CharDriverState *chr = opaque;
3545
    TCPCharDriver *s = chr->opaque;
3546

    
3547
    s->connected = 1;
3548
    qemu_set_fd_handler2(s->fd, tcp_chr_read_poll,
3549
                         tcp_chr_read, NULL, chr);
3550
    qemu_chr_reset(chr);
3551
}
3552

    
3553
#define IACSET(x,a,b,c) x[0] = a; x[1] = b; x[2] = c;
3554
static void tcp_chr_telnet_init(int fd)
3555
{
3556
    char buf[3];
3557
    /* Send the telnet negotion to put telnet in binary, no echo, single char mode */
3558
    IACSET(buf, 0xff, 0xfb, 0x01);  /* IAC WILL ECHO */
3559
    send(fd, (char *)buf, 3, 0);
3560
    IACSET(buf, 0xff, 0xfb, 0x03);  /* IAC WILL Suppress go ahead */
3561
    send(fd, (char *)buf, 3, 0);
3562
    IACSET(buf, 0xff, 0xfb, 0x00);  /* IAC WILL Binary */
3563
    send(fd, (char *)buf, 3, 0);
3564
    IACSET(buf, 0xff, 0xfd, 0x00);  /* IAC DO Binary */
3565
    send(fd, (char *)buf, 3, 0);
3566
}
3567

    
3568
static void socket_set_nodelay(int fd)
3569
{
3570
    int val = 1;
3571
    setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char *)&val, sizeof(val));
3572
}
3573

    
3574
static void tcp_chr_accept(void *opaque)
3575
{
3576
    CharDriverState *chr = opaque;
3577
    TCPCharDriver *s = chr->opaque;
3578
    struct sockaddr_in saddr;
3579
#ifndef _WIN32
3580
    struct sockaddr_un uaddr;
3581
#endif
3582
    struct sockaddr *addr;
3583
    socklen_t len;
3584
    int fd;
3585

    
3586
    for(;;) {
3587
#ifndef _WIN32
3588
        if (s->is_unix) {
3589
            len = sizeof(uaddr);
3590
            addr = (struct sockaddr *)&uaddr;
3591
        } else
3592
#endif
3593
        {
3594
            len = sizeof(saddr);
3595
            addr = (struct sockaddr *)&saddr;
3596
        }
3597
        fd = accept(s->listen_fd, addr, &len);
3598
        if (fd < 0 && errno != EINTR) {
3599
            return;
3600
        } else if (fd >= 0) {
3601
            if (s->do_telnetopt)
3602
                tcp_chr_telnet_init(fd);
3603
            break;
3604
        }
3605
    }
3606
    socket_set_nonblock(fd);
3607
    if (s->do_nodelay)
3608
        socket_set_nodelay(fd);
3609
    s->fd = fd;
3610
    qemu_set_fd_handler(s->listen_fd, NULL, NULL, NULL);
3611
    tcp_chr_connect(chr);
3612
}
3613

    
3614
static void tcp_chr_close(CharDriverState *chr)
3615
{
3616
    TCPCharDriver *s = chr->opaque;
3617
    if (s->fd >= 0)
3618
        closesocket(s->fd);
3619
    if (s->listen_fd >= 0)
3620
        closesocket(s->listen_fd);
3621
    qemu_free(s);
3622
}
3623

    
3624
static CharDriverState *qemu_chr_open_tcp(const char *host_str,
3625
                                          int is_telnet,
3626
                                          int is_unix)
3627
{
3628
    CharDriverState *chr = NULL;
3629
    TCPCharDriver *s = NULL;
3630
    int fd = -1, ret, err, val;
3631
    int is_listen = 0;
3632
    int is_waitconnect = 1;
3633
    int do_nodelay = 0;
3634
    const char *ptr;
3635
    struct sockaddr_in saddr;
3636
#ifndef _WIN32
3637
    struct sockaddr_un uaddr;
3638
#endif
3639
    struct sockaddr *addr;
3640
    socklen_t addrlen;
3641

    
3642
#ifndef _WIN32
3643
    if (is_unix) {
3644
        addr = (struct sockaddr *)&uaddr;
3645
        addrlen = sizeof(uaddr);
3646
        if (parse_unix_path(&uaddr, host_str) < 0)
3647
            goto fail;
3648
    } else
3649
#endif
3650
    {
3651
        addr = (struct sockaddr *)&saddr;
3652
        addrlen = sizeof(saddr);
3653
        if (parse_host_port(&saddr, host_str) < 0)
3654
            goto fail;
3655
    }
3656

    
3657
    ptr = host_str;
3658
    while((ptr = strchr(ptr,','))) {
3659
        ptr++;
3660
        if (!strncmp(ptr,"server",6)) {
3661
            is_listen = 1;
3662
        } else if (!strncmp(ptr,"nowait",6)) {
3663
            is_waitconnect = 0;
3664
        } else if (!strncmp(ptr,"nodelay",6)) {
3665
            do_nodelay = 1;
3666
        } else {
3667
            printf("Unknown option: %s\n", ptr);
3668
            goto fail;
3669
        }
3670
    }
3671
    if (!is_listen)
3672
        is_waitconnect = 0;
3673

    
3674
    chr = qemu_mallocz(sizeof(CharDriverState));
3675
    if (!chr)
3676
        goto fail;
3677
    s = qemu_mallocz(sizeof(TCPCharDriver));
3678
    if (!s)
3679
        goto fail;
3680

    
3681
#ifndef _WIN32
3682
    if (is_unix)
3683
        fd = socket(PF_UNIX, SOCK_STREAM, 0);
3684
    else
3685
#endif
3686
        fd = socket(PF_INET, SOCK_STREAM, 0);
3687

    
3688
    if (fd < 0)
3689
        goto fail;
3690

    
3691
    if (!is_waitconnect)
3692
        socket_set_nonblock(fd);
3693

    
3694
    s->connected = 0;
3695
    s->fd = -1;
3696
    s->listen_fd = -1;
3697
    s->is_unix = is_unix;
3698
    s->do_nodelay = do_nodelay && !is_unix;
3699

    
3700
    chr->opaque = s;
3701
    chr->chr_write = tcp_chr_write;
3702
    chr->chr_close = tcp_chr_close;
3703

    
3704
    if (is_listen) {
3705
        /* allow fast reuse */
3706
#ifndef _WIN32
3707
        if (is_unix) {
3708
            char path[109];
3709
            pstrcpy(path, sizeof(path), uaddr.sun_path);
3710
            unlink(path);
3711
        } else
3712
#endif
3713
        {
3714
            val = 1;
3715
            setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const char *)&val, sizeof(val));
3716
        }
3717

    
3718
        ret = bind(fd, addr, addrlen);
3719
        if (ret < 0)
3720
            goto fail;
3721

    
3722
        ret = listen(fd, 0);
3723
        if (ret < 0)
3724
            goto fail;
3725

    
3726
        s->listen_fd = fd;
3727
        qemu_set_fd_handler(s->listen_fd, tcp_chr_accept, NULL, chr);
3728
        if (is_telnet)
3729
            s->do_telnetopt = 1;
3730
    } else {
3731
        for(;;) {
3732
            ret = connect(fd, addr, addrlen);
3733
            if (ret < 0) {
3734
                err = socket_error();
3735
                if (err == EINTR || err == EWOULDBLOCK) {
3736
                } else if (err == EINPROGRESS) {
3737
                    break;
3738
#ifdef _WIN32
3739
                } else if (err == WSAEALREADY) {
3740
                    break;
3741
#endif
3742
                } else {
3743
                    goto fail;
3744
                }
3745
            } else {
3746
                s->connected = 1;
3747
                break;
3748
            }
3749
        }
3750
        s->fd = fd;
3751
        socket_set_nodelay(fd);
3752
        if (s->connected)
3753
            tcp_chr_connect(chr);
3754
        else
3755
            qemu_set_fd_handler(s->fd, NULL, tcp_chr_connect, chr);
3756
    }
3757

    
3758
    if (is_listen && is_waitconnect) {
3759
        printf("QEMU waiting for connection on: %s\n", host_str);
3760
        tcp_chr_accept(chr);
3761
        socket_set_nonblock(s->listen_fd);
3762
    }
3763

    
3764
    return chr;
3765
 fail:
3766
    if (fd >= 0)
3767
        closesocket(fd);
3768
    qemu_free(s);
3769
    qemu_free(chr);
3770
    return NULL;
3771
}
3772

    
3773
CharDriverState *qemu_chr_open(const char *filename)
3774
{
3775
    const char *p;
3776

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

    
3849
void qemu_chr_close(CharDriverState *chr)
3850
{
3851
    if (chr->chr_close)
3852
        chr->chr_close(chr);
3853
    qemu_free(chr);
3854
}
3855

    
3856
/***********************************************************/
3857
/* network device redirectors */
3858

    
3859
__attribute__ (( unused ))
3860
static void hex_dump(FILE *f, const uint8_t *buf, int size)
3861
{
3862
    int len, i, j, c;
3863

    
3864
    for(i=0;i<size;i+=16) {
3865
        len = size - i;
3866
        if (len > 16)
3867
            len = 16;
3868
        fprintf(f, "%08x ", i);
3869
        for(j=0;j<16;j++) {
3870
            if (j < len)
3871
                fprintf(f, " %02x", buf[i+j]);
3872
            else
3873
                fprintf(f, "   ");
3874
        }
3875
        fprintf(f, " ");
3876
        for(j=0;j<len;j++) {
3877
            c = buf[i+j];
3878
            if (c < ' ' || c > '~')
3879
                c = '.';
3880
            fprintf(f, "%c", c);
3881
        }
3882
        fprintf(f, "\n");
3883
    }
3884
}
3885

    
3886
static int parse_macaddr(uint8_t *macaddr, const char *p)
3887
{
3888
    int i;
3889
    char *last_char;
3890
    long int offset;
3891

    
3892
    errno = 0;
3893
    offset = strtol(p, &last_char, 0);    
3894
    if (0 == errno && '\0' == *last_char &&
3895
            offset >= 0 && offset <= 0xFFFFFF) {
3896
        macaddr[3] = (offset & 0xFF0000) >> 16;
3897
        macaddr[4] = (offset & 0xFF00) >> 8;
3898
        macaddr[5] = offset & 0xFF;
3899
        return 0;
3900
    } else {
3901
        for(i = 0; i < 6; i++) {
3902
            macaddr[i] = strtol(p, (char **)&p, 16);
3903
            if (i == 5) {
3904
                if (*p != '\0')
3905
                    return -1;
3906
            } else {
3907
                if (*p != ':' && *p != '-')
3908
                    return -1;
3909
                p++;
3910
            }
3911
        }
3912
        return 0;    
3913
    }
3914

    
3915
    return -1;
3916
}
3917

    
3918
static int get_str_sep(char *buf, int buf_size, const char **pp, int sep)
3919
{
3920
    const char *p, *p1;
3921
    int len;
3922
    p = *pp;
3923
    p1 = strchr(p, sep);
3924
    if (!p1)
3925
        return -1;
3926
    len = p1 - p;
3927
    p1++;
3928
    if (buf_size > 0) {
3929
        if (len > buf_size - 1)
3930
            len = buf_size - 1;
3931
        memcpy(buf, p, len);
3932
        buf[len] = '\0';
3933
    }
3934
    *pp = p1;
3935
    return 0;
3936
}
3937

    
3938
int parse_host_src_port(struct sockaddr_in *haddr,
3939
                        struct sockaddr_in *saddr,
3940
                        const char *input_str)
3941
{
3942
    char *str = strdup(input_str);
3943
    char *host_str = str;
3944
    char *src_str;
3945
    char *ptr;
3946

    
3947
    /*
3948
     * Chop off any extra arguments at the end of the string which
3949
     * would start with a comma, then fill in the src port information
3950
     * if it was provided else use the "any address" and "any port".
3951
     */
3952
    if ((ptr = strchr(str,',')))
3953
        *ptr = '\0';
3954

    
3955
    if ((src_str = strchr(input_str,'@'))) {
3956
        *src_str = '\0';
3957
        src_str++;
3958
    }
3959

    
3960
    if (parse_host_port(haddr, host_str) < 0)
3961
        goto fail;
3962

    
3963
    if (!src_str || *src_str == '\0')
3964
        src_str = ":0";
3965

    
3966
    if (parse_host_port(saddr, src_str) < 0)
3967
        goto fail;
3968

    
3969
    free(str);
3970
    return(0);
3971

    
3972
fail:
3973
    free(str);
3974
    return -1;
3975
}
3976

    
3977
int parse_host_port(struct sockaddr_in *saddr, const char *str)
3978
{
3979
    char buf[512];
3980
    struct hostent *he;
3981
    const char *p, *r;
3982
    int port;
3983

    
3984
    p = str;
3985
    if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
3986
        return -1;
3987
    saddr->sin_family = AF_INET;
3988
    if (buf[0] == '\0') {
3989
        saddr->sin_addr.s_addr = 0;
3990
    } else {
3991
        if (isdigit(buf[0])) {
3992
            if (!inet_aton(buf, &saddr->sin_addr))
3993
                return -1;
3994
        } else {
3995
            if ((he = gethostbyname(buf)) == NULL)
3996
                return - 1;
3997
            saddr->sin_addr = *(struct in_addr *)he->h_addr;
3998
        }
3999
    }
4000
    port = strtol(p, (char **)&r, 0);
4001
    if (r == p)
4002
        return -1;
4003
    saddr->sin_port = htons(port);
4004
    return 0;
4005
}
4006

    
4007
#ifndef _WIN32
4008
static int parse_unix_path(struct sockaddr_un *uaddr, const char *str)
4009
{
4010
    const char *p;
4011
    int len;
4012

    
4013
    len = MIN(108, strlen(str));
4014
    p = strchr(str, ',');
4015
    if (p)
4016
        len = MIN(len, p - str);
4017

    
4018
    memset(uaddr, 0, sizeof(*uaddr));
4019

    
4020
    uaddr->sun_family = AF_UNIX;
4021
    memcpy(uaddr->sun_path, str, len);
4022

    
4023
    return 0;
4024
}
4025
#endif
4026

    
4027
/* find or alloc a new VLAN */
4028
VLANState *qemu_find_vlan(int id)
4029
{
4030
    VLANState **pvlan, *vlan;
4031
    for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) {
4032
        if (vlan->id == id)
4033
            return vlan;
4034
    }
4035
    vlan = qemu_mallocz(sizeof(VLANState));
4036
    if (!vlan)
4037
        return NULL;
4038
    vlan->id = id;
4039
    vlan->next = NULL;
4040
    pvlan = &first_vlan;
4041
    while (*pvlan != NULL)
4042
        pvlan = &(*pvlan)->next;
4043
    *pvlan = vlan;
4044
    return vlan;
4045
}
4046

    
4047
VLANClientState *qemu_new_vlan_client(VLANState *vlan,
4048
                                      IOReadHandler *fd_read,
4049
                                      IOCanRWHandler *fd_can_read,
4050
                                      void *opaque)
4051
{
4052
    VLANClientState *vc, **pvc;
4053
    vc = qemu_mallocz(sizeof(VLANClientState));
4054
    if (!vc)
4055
        return NULL;
4056
    vc->fd_read = fd_read;
4057
    vc->fd_can_read = fd_can_read;
4058
    vc->opaque = opaque;
4059
    vc->vlan = vlan;
4060

    
4061
    vc->next = NULL;
4062
    pvc = &vlan->first_client;
4063
    while (*pvc != NULL)
4064
        pvc = &(*pvc)->next;
4065
    *pvc = vc;
4066
    return vc;
4067
}
4068

    
4069
void qemu_del_vlan_client(VLANClientState *vc)
4070
{
4071
    VLANClientState **pvc = &vc->vlan->first_client;
4072

    
4073
    while (*pvc != NULL)
4074
        if (*pvc == vc) {
4075
            *pvc = vc->next;
4076
            free(vc);
4077
            break;
4078
        } else
4079
            pvc = &(*pvc)->next;
4080
}
4081

    
4082
int qemu_can_send_packet(VLANClientState *vc1)
4083
{
4084
    VLANState *vlan = vc1->vlan;
4085
    VLANClientState *vc;
4086

    
4087
    for(vc = vlan->first_client; vc != NULL; vc = vc->next) {
4088
        if (vc != vc1) {
4089
            if (vc->fd_can_read && vc->fd_can_read(vc->opaque))
4090
                return 1;
4091
        }
4092
    }
4093
    return 0;
4094
}
4095

    
4096
void qemu_send_packet(VLANClientState *vc1, const uint8_t *buf, int size)
4097
{
4098
    VLANState *vlan = vc1->vlan;
4099
    VLANClientState *vc;
4100

    
4101
#if 0
4102
    printf("vlan %d send:\n", vlan->id);
4103
    hex_dump(stdout, buf, size);
4104
#endif
4105
    for(vc = vlan->first_client; vc != NULL; vc = vc->next) {
4106
        if (vc != vc1) {
4107
            vc->fd_read(vc->opaque, buf, size);
4108
        }
4109
    }
4110
}
4111

    
4112
#if defined(CONFIG_SLIRP)
4113

    
4114
/* slirp network adapter */
4115

    
4116
static int slirp_inited;
4117
static VLANClientState *slirp_vc;
4118

    
4119
int slirp_can_output(void)
4120
{
4121
    return !slirp_vc || qemu_can_send_packet(slirp_vc);
4122
}
4123

    
4124
void slirp_output(const uint8_t *pkt, int pkt_len)
4125
{
4126
#if 0
4127
    printf("slirp output:\n");
4128
    hex_dump(stdout, pkt, pkt_len);
4129
#endif
4130
    if (!slirp_vc)
4131
        return;
4132
    qemu_send_packet(slirp_vc, pkt, pkt_len);
4133
}
4134

    
4135
static void slirp_receive(void *opaque, const uint8_t *buf, int size)
4136
{
4137
#if 0
4138
    printf("slirp input:\n");
4139
    hex_dump(stdout, buf, size);
4140
#endif
4141
    slirp_input(buf, size);
4142
}
4143

    
4144
static int net_slirp_init(VLANState *vlan)
4145
{
4146
    if (!slirp_inited) {
4147
        slirp_inited = 1;
4148
        slirp_init();
4149
    }
4150
    slirp_vc = qemu_new_vlan_client(vlan,
4151
                                    slirp_receive, NULL, NULL);
4152
    snprintf(slirp_vc->info_str, sizeof(slirp_vc->info_str), "user redirector");
4153
    return 0;
4154
}
4155

    
4156
static void net_slirp_redir(const char *redir_str)
4157
{
4158
    int is_udp;
4159
    char buf[256], *r;
4160
    const char *p;
4161
    struct in_addr guest_addr;
4162
    int host_port, guest_port;
4163

    
4164
    if (!slirp_inited) {
4165
        slirp_inited = 1;
4166
        slirp_init();
4167
    }
4168

    
4169
    p = redir_str;
4170
    if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
4171
        goto fail;
4172
    if (!strcmp(buf, "tcp")) {
4173
        is_udp = 0;
4174
    } else if (!strcmp(buf, "udp")) {
4175
        is_udp = 1;
4176
    } else {
4177
        goto fail;
4178
    }
4179

    
4180
    if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
4181
        goto fail;
4182
    host_port = strtol(buf, &r, 0);
4183
    if (r == buf)
4184
        goto fail;
4185

    
4186
    if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
4187
        goto fail;
4188
    if (buf[0] == '\0') {
4189
        pstrcpy(buf, sizeof(buf), "10.0.2.15");
4190
    }
4191
    if (!inet_aton(buf, &guest_addr))
4192
        goto fail;
4193

    
4194
    guest_port = strtol(p, &r, 0);
4195
    if (r == p)
4196
        goto fail;
4197

    
4198
    if (slirp_redir(is_udp, host_port, guest_addr, guest_port) < 0) {
4199
        fprintf(stderr, "qemu: could not set up redirection\n");
4200
        exit(1);
4201
    }
4202
    return;
4203
 fail:
4204
    fprintf(stderr, "qemu: syntax: -redir [tcp|udp]:host-port:[guest-host]:guest-port\n");
4205
    exit(1);
4206
}
4207

    
4208
#ifndef _WIN32
4209

    
4210
char smb_dir[1024];
4211

    
4212
static void erase_dir(char *dir_name)
4213
{
4214
    DIR *d;
4215
    struct dirent *de;
4216
    char filename[1024];
4217

    
4218
    /* erase all the files in the directory */
4219
    if ((d = opendir(dir_name)) != 0) {
4220
        for(;;) {
4221
            de = readdir(d);
4222
            if (!de)
4223
                break;
4224
            if (strcmp(de->d_name, ".") != 0 &&
4225
                strcmp(de->d_name, "..") != 0) {
4226
                snprintf(filename, sizeof(filename), "%s/%s",
4227
                         smb_dir, de->d_name);
4228
                if (unlink(filename) != 0)  /* is it a directory? */
4229
                    erase_dir(filename);
4230
            }
4231
        }
4232
        closedir(d);
4233
        rmdir(dir_name);
4234
    }
4235
}
4236

    
4237
/* automatic user mode samba server configuration */
4238
static void smb_exit(void)
4239
{
4240
    erase_dir(smb_dir);
4241
}
4242

    
4243
/* automatic user mode samba server configuration */
4244
static void net_slirp_smb(const char *exported_dir)
4245
{
4246
    char smb_conf[1024];
4247
    char smb_cmdline[1024];
4248
    FILE *f;
4249

    
4250
    if (!slirp_inited) {
4251
        slirp_inited = 1;
4252
        slirp_init();
4253
    }
4254

    
4255
    /* XXX: better tmp dir construction */
4256
    snprintf(smb_dir, sizeof(smb_dir), "/tmp/qemu-smb.%d", getpid());
4257
    if (mkdir(smb_dir, 0700) < 0) {
4258
        fprintf(stderr, "qemu: could not create samba server dir '%s'\n", smb_dir);
4259
        exit(1);
4260
    }
4261
    snprintf(smb_conf, sizeof(smb_conf), "%s/%s", smb_dir, "smb.conf");
4262

    
4263
    f = fopen(smb_conf, "w");
4264
    if (!f) {
4265
        fprintf(stderr, "qemu: could not create samba server configuration file '%s'\n", smb_conf);
4266
        exit(1);
4267
    }
4268
    fprintf(f,
4269
            "[global]\n"
4270
            "private dir=%s\n"
4271
            "smb ports=0\n"
4272
            "socket address=127.0.0.1\n"
4273
            "pid directory=%s\n"
4274
            "lock directory=%s\n"
4275
            "log file=%s/log.smbd\n"
4276
            "smb passwd file=%s/smbpasswd\n"
4277
            "security = share\n"
4278
            "[qemu]\n"
4279
            "path=%s\n"
4280
            "read only=no\n"
4281
            "guest ok=yes\n",
4282
            smb_dir,
4283
            smb_dir,
4284
            smb_dir,
4285
            smb_dir,
4286
            smb_dir,
4287
            exported_dir
4288
            );
4289
    fclose(f);
4290
    atexit(smb_exit);
4291

    
4292
    snprintf(smb_cmdline, sizeof(smb_cmdline), "%s -s %s",
4293
             SMBD_COMMAND, smb_conf);
4294

    
4295
    slirp_add_exec(0, smb_cmdline, 4, 139);
4296
}
4297

    
4298
#endif /* !defined(_WIN32) */
4299
void do_info_slirp(void)
4300
{
4301
    slirp_stats();
4302
}
4303

    
4304
#endif /* CONFIG_SLIRP */
4305

    
4306
#if !defined(_WIN32)
4307

    
4308
typedef struct TAPState {
4309
    VLANClientState *vc;
4310
    int fd;
4311
    char down_script[1024];
4312
} TAPState;
4313

    
4314
static void tap_receive(void *opaque, const uint8_t *buf, int size)
4315
{
4316
    TAPState *s = opaque;
4317
    int ret;
4318
    for(;;) {
4319
        ret = write(s->fd, buf, size);
4320
        if (ret < 0 && (errno == EINTR || errno == EAGAIN)) {
4321
        } else {
4322
            break;
4323
        }
4324
    }
4325
}
4326

    
4327
static void tap_send(void *opaque)
4328
{
4329
    TAPState *s = opaque;
4330
    uint8_t buf[4096];
4331
    int size;
4332

    
4333
#ifdef __sun__
4334
    struct strbuf sbuf;
4335
    int f = 0;
4336
    sbuf.maxlen = sizeof(buf);
4337
    sbuf.buf = buf;
4338
    size = getmsg(s->fd, NULL, &sbuf, &f) >=0 ? sbuf.len : -1;
4339
#else
4340
    size = read(s->fd, buf, sizeof(buf));
4341
#endif
4342
    if (size > 0) {
4343
        qemu_send_packet(s->vc, buf, size);
4344
    }
4345
}
4346

    
4347
/* fd support */
4348

    
4349
static TAPState *net_tap_fd_init(VLANState *vlan, int fd)
4350
{
4351
    TAPState *s;
4352

    
4353
    s = qemu_mallocz(sizeof(TAPState));
4354
    if (!s)
4355
        return NULL;
4356
    s->fd = fd;
4357
    s->vc = qemu_new_vlan_client(vlan, tap_receive, NULL, s);
4358
    qemu_set_fd_handler(s->fd, tap_send, NULL, s);
4359
    snprintf(s->vc->info_str, sizeof(s->vc->info_str), "tap: fd=%d", fd);
4360
    return s;
4361
}
4362

    
4363
#if defined (_BSD) || defined (__FreeBSD_kernel__)
4364
static int tap_open(char *ifname, int ifname_size)
4365
{
4366
    int fd;
4367
    char *dev;
4368
    struct stat s;
4369

    
4370
    TFR(fd = open("/dev/tap", O_RDWR));
4371
    if (fd < 0) {
4372
        fprintf(stderr, "warning: could not open /dev/tap: no virtual network emulation\n");
4373
        return -1;
4374
    }
4375

    
4376
    fstat(fd, &s);
4377
    dev = devname(s.st_rdev, S_IFCHR);
4378
    pstrcpy(ifname, ifname_size, dev);
4379

    
4380
    fcntl(fd, F_SETFL, O_NONBLOCK);
4381
    return fd;
4382
}
4383
#elif defined(__sun__)
4384
#define TUNNEWPPA       (('T'<<16) | 0x0001)
4385
/*
4386
 * Allocate TAP device, returns opened fd.
4387
 * Stores dev name in the first arg(must be large enough).
4388
 */
4389
int tap_alloc(char *dev, size_t dev_size)
4390
{
4391
    int tap_fd, if_fd, ppa = -1;
4392
    static int ip_fd = 0;
4393
    char *ptr;
4394

    
4395
    static int arp_fd = 0;
4396
    int ip_muxid, arp_muxid;
4397
    struct strioctl  strioc_if, strioc_ppa;
4398
    int link_type = I_PLINK;;
4399
    struct lifreq ifr;
4400
    char actual_name[32] = "";
4401

    
4402
    memset(&ifr, 0x0, sizeof(ifr));
4403

    
4404
    if( *dev ){
4405
       ptr = dev;
4406
       while( *ptr && !isdigit((int)*ptr) ) ptr++;
4407
       ppa = atoi(ptr);
4408
    }
4409

    
4410
    /* Check if IP device was opened */
4411
    if( ip_fd )
4412
       close(ip_fd);
4413

    
4414
    TFR(ip_fd = open("/dev/udp", O_RDWR, 0));
4415
    if (ip_fd < 0) {
4416
       syslog(LOG_ERR, "Can't open /dev/ip (actually /dev/udp)");
4417
       return -1;
4418
    }
4419

    
4420
    TFR(tap_fd = open("/dev/tap", O_RDWR, 0));
4421
    if (tap_fd < 0) {
4422
       syslog(LOG_ERR, "Can't open /dev/tap");
4423
       return -1;
4424
    }
4425

    
4426
    /* Assign a new PPA and get its unit number. */
4427
    strioc_ppa.ic_cmd = TUNNEWPPA;
4428
    strioc_ppa.ic_timout = 0;
4429
    strioc_ppa.ic_len = sizeof(ppa);
4430
    strioc_ppa.ic_dp = (char *)&ppa;
4431
    if ((ppa = ioctl (tap_fd, I_STR, &strioc_ppa)) < 0)
4432
       syslog (LOG_ERR, "Can't assign new interface");
4433

    
4434
    TFR(if_fd = open("/dev/tap", O_RDWR, 0));
4435
    if (if_fd < 0) {
4436
       syslog(LOG_ERR, "Can't open /dev/tap (2)");
4437
       return -1;
4438
    }
4439
    if(ioctl(if_fd, I_PUSH, "ip") < 0){
4440
       syslog(LOG_ERR, "Can't push IP module");
4441
       return -1;
4442
    }
4443

    
4444
    if (ioctl(if_fd, SIOCGLIFFLAGS, &ifr) < 0)
4445
        syslog(LOG_ERR, "Can't get flags\n");
4446

    
4447
    snprintf (actual_name, 32, "tap%d", ppa);
4448
    strncpy (ifr.lifr_name, actual_name, sizeof (ifr.lifr_name));
4449

    
4450
    ifr.lifr_ppa = ppa;
4451
    /* Assign ppa according to the unit number returned by tun device */
4452

    
4453
    if (ioctl (if_fd, SIOCSLIFNAME, &ifr) < 0)
4454
        syslog (LOG_ERR, "Can't set PPA %d", ppa);
4455
    if (ioctl(if_fd, SIOCGLIFFLAGS, &ifr) <0)
4456
        syslog (LOG_ERR, "Can't get flags\n");
4457
    /* Push arp module to if_fd */
4458
    if (ioctl (if_fd, I_PUSH, "arp") < 0)
4459
        syslog (LOG_ERR, "Can't push ARP module (2)");
4460

    
4461
    /* Push arp module to ip_fd */
4462
    if (ioctl (ip_fd, I_POP, NULL) < 0)
4463
        syslog (LOG_ERR, "I_POP failed\n");
4464
    if (ioctl (ip_fd, I_PUSH, "arp") < 0)
4465
        syslog (LOG_ERR, "Can't push ARP module (3)\n");
4466
    /* Open arp_fd */
4467
    TFR(arp_fd = open ("/dev/tap", O_RDWR, 0));
4468
    if (arp_fd < 0)
4469
       syslog (LOG_ERR, "Can't open %s\n", "/dev/tap");
4470

    
4471
    /* Set ifname to arp */
4472
    strioc_if.ic_cmd = SIOCSLIFNAME;
4473
    strioc_if.ic_timout = 0;
4474
    strioc_if.ic_len = sizeof(ifr);
4475
    strioc_if.ic_dp = (char *)&ifr;
4476
    if (ioctl(arp_fd, I_STR, &strioc_if) < 0){
4477
        syslog (LOG_ERR, "Can't set ifname to arp\n");
4478
    }
4479

    
4480
    if((ip_muxid = ioctl(ip_fd, I_LINK, if_fd)) < 0){
4481
       syslog(LOG_ERR, "Can't link TAP device to IP");
4482
       return -1;
4483
    }
4484

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

    
4488
    close (if_fd);
4489

    
4490
    memset(&ifr, 0x0, sizeof(ifr));
4491
    strncpy (ifr.lifr_name, actual_name, sizeof (ifr.lifr_name));
4492
    ifr.lifr_ip_muxid  = ip_muxid;
4493
    ifr.lifr_arp_muxid = arp_muxid;
4494

    
4495
    if (ioctl (ip_fd, SIOCSLIFMUXID, &ifr) < 0)
4496
    {
4497
      ioctl (ip_fd, I_PUNLINK , arp_muxid);
4498
      ioctl (ip_fd, I_PUNLINK, ip_muxid);
4499
      syslog (LOG_ERR, "Can't set multiplexor id");
4500
    }
4501

    
4502
    snprintf(dev, dev_size, "tap%d", ppa);
4503
    return tap_fd;
4504
}
4505

    
4506
static int tap_open(char *ifname, int ifname_size)
4507
{
4508
    char  dev[10]="";
4509
    int fd;
4510
    if( (fd = tap_alloc(dev, sizeof(dev))) < 0 ){
4511
       fprintf(stderr, "Cannot allocate TAP device\n");
4512
       return -1;
4513
    }
4514
    pstrcpy(ifname, ifname_size, dev);
4515
    fcntl(fd, F_SETFL, O_NONBLOCK);
4516
    return fd;
4517
}
4518
#else
4519
static int tap_open(char *ifname, int ifname_size)
4520
{
4521
    struct ifreq ifr;
4522
    int fd, ret;
4523

    
4524
    TFR(fd = open("/dev/net/tun", O_RDWR));
4525
    if (fd < 0) {
4526
        fprintf(stderr, "warning: could not open /dev/net/tun: no virtual network emulation\n");
4527
        return -1;
4528
    }
4529
    memset(&ifr, 0, sizeof(ifr));
4530
    ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
4531
    if (ifname[0] != '\0')
4532
        pstrcpy(ifr.ifr_name, IFNAMSIZ, ifname);
4533
    else
4534
        pstrcpy(ifr.ifr_name, IFNAMSIZ, "tap%d");
4535
    ret = ioctl(fd, TUNSETIFF, (void *) &ifr);
4536
    if (ret != 0) {
4537
        fprintf(stderr, "warning: could not configure /dev/net/tun: no virtual network emulation\n");
4538
        close(fd);
4539
        return -1;
4540
    }
4541
    pstrcpy(ifname, ifname_size, ifr.ifr_name);
4542
    fcntl(fd, F_SETFL, O_NONBLOCK);
4543
    return fd;
4544
}
4545
#endif
4546

    
4547
static int launch_script(const char *setup_script, const char *ifname, int fd)
4548
{
4549
    int pid, status;
4550
    char *args[3];
4551
    char **parg;
4552

    
4553
        /* try to launch network script */
4554
        pid = fork();
4555
        if (pid >= 0) {
4556
            if (pid == 0) {
4557
                int open_max = sysconf (_SC_OPEN_MAX), i;
4558
                for (i = 0; i < open_max; i++)
4559
                    if (i != STDIN_FILENO &&
4560
                        i != STDOUT_FILENO &&
4561
                        i != STDERR_FILENO &&
4562
                        i != fd)
4563
                        close(i);
4564

    
4565
                parg = args;
4566
                *parg++ = (char *)setup_script;
4567
                *parg++ = (char *)ifname;
4568
                *parg++ = NULL;
4569
                execv(setup_script, args);
4570
                _exit(1);
4571
            }
4572
            while (waitpid(pid, &status, 0) != pid);
4573
            if (!WIFEXITED(status) ||
4574
                WEXITSTATUS(status) != 0) {
4575
                fprintf(stderr, "%s: could not launch network script\n",
4576
                        setup_script);
4577
                return -1;
4578
            }
4579
        }
4580
    return 0;
4581
}
4582

    
4583
static int net_tap_init(VLANState *vlan, const char *ifname1,
4584
                        const char *setup_script, const char *down_script)
4585
{
4586
    TAPState *s;
4587
    int fd;
4588
    char ifname[128];
4589

    
4590
    if (ifname1 != NULL)
4591
        pstrcpy(ifname, sizeof(ifname), ifname1);
4592
    else
4593
        ifname[0] = '\0';
4594
    TFR(fd = tap_open(ifname, sizeof(ifname)));
4595
    if (fd < 0)
4596
        return -1;
4597

    
4598
    if (!setup_script || !strcmp(setup_script, "no"))
4599
        setup_script = "";
4600
    if (setup_script[0] != '\0') {
4601
        if (launch_script(setup_script, ifname, fd))
4602
            return -1;
4603
    }
4604
    s = net_tap_fd_init(vlan, fd);
4605
    if (!s)
4606
        return -1;
4607
    snprintf(s->vc->info_str, sizeof(s->vc->info_str),
4608
             "tap: ifname=%s setup_script=%s", ifname, setup_script);
4609
    if (down_script && strcmp(down_script, "no"))
4610
        snprintf(s->down_script, sizeof(s->down_script), "%s", down_script);
4611
    return 0;
4612
}
4613

    
4614
#endif /* !_WIN32 */
4615

    
4616
#if defined(CONFIG_VDE)
4617
typedef struct VDEState {
4618
    VLANClientState *vc;
4619
    VDECONN *vde;
4620
} VDEState;
4621

    
4622
static void vde_to_qemu(void *opaque)
4623
{
4624
    VDEState *s = opaque;
4625
    uint8_t buf[4096];
4626
    int size;
4627

    
4628
    size = vde_recv(s->vde, buf, sizeof(buf), 0);
4629
    if (size > 0) {
4630
        qemu_send_packet(s->vc, buf, size);
4631
    }
4632
}
4633

    
4634
static void vde_from_qemu(void *opaque, const uint8_t *buf, int size)
4635
{
4636
    VDEState *s = opaque;
4637
    int ret;
4638
    for(;;) {
4639
        ret = vde_send(s->vde, buf, size, 0);
4640
        if (ret < 0 && errno == EINTR) {
4641
        } else {
4642
            break;
4643
        }
4644
    }
4645
}
4646

    
4647
static int net_vde_init(VLANState *vlan, const char *sock, int port,
4648
                        const char *group, int mode)
4649
{
4650
    VDEState *s;
4651
    char *init_group = strlen(group) ? (char *)group : NULL;
4652
    char *init_sock = strlen(sock) ? (char *)sock : NULL;
4653

    
4654
    struct vde_open_args args = {
4655
        .port = port,
4656
        .group = init_group,
4657
        .mode = mode,
4658
    };
4659

    
4660
    s = qemu_mallocz(sizeof(VDEState));
4661
    if (!s)
4662
        return -1;
4663
    s->vde = vde_open(init_sock, "QEMU", &args);
4664
    if (!s->vde){
4665
        free(s);
4666
        return -1;
4667
    }
4668
    s->vc = qemu_new_vlan_client(vlan, vde_from_qemu, NULL, s);
4669
    qemu_set_fd_handler(vde_datafd(s->vde), vde_to_qemu, NULL, s);
4670
    snprintf(s->vc->info_str, sizeof(s->vc->info_str), "vde: sock=%s fd=%d",
4671
             sock, vde_datafd(s->vde));
4672
    return 0;
4673
}
4674
#endif
4675

    
4676
/* network connection */
4677
typedef struct NetSocketState {
4678
    VLANClientState *vc;
4679
    int fd;
4680
    int state; /* 0 = getting length, 1 = getting data */
4681
    int index;
4682
    int packet_len;
4683
    uint8_t buf[4096];
4684
    struct sockaddr_in dgram_dst; /* contains inet host and port destination iff connectionless (SOCK_DGRAM) */
4685
} NetSocketState;
4686

    
4687
typedef struct NetSocketListenState {
4688
    VLANState *vlan;
4689
    int fd;
4690
} NetSocketListenState;
4691

    
4692
/* XXX: we consider we can send the whole packet without blocking */
4693
static void net_socket_receive(void *opaque, const uint8_t *buf, int size)
4694
{
4695
    NetSocketState *s = opaque;
4696
    uint32_t len;
4697
    len = htonl(size);
4698

    
4699
    send_all(s->fd, (const uint8_t *)&len, sizeof(len));
4700
    send_all(s->fd, buf, size);
4701
}
4702

    
4703
static void net_socket_receive_dgram(void *opaque, const uint8_t *buf, int size)
4704
{
4705
    NetSocketState *s = opaque;
4706
    sendto(s->fd, buf, size, 0,
4707
           (struct sockaddr *)&s->dgram_dst, sizeof(s->dgram_dst));
4708
}
4709

    
4710
static void net_socket_send(void *opaque)
4711
{
4712
    NetSocketState *s = opaque;
4713
    int l, size, err;
4714
    uint8_t buf1[4096];
4715
    const uint8_t *buf;
4716

    
4717
    size = recv(s->fd, buf1, sizeof(buf1), 0);
4718
    if (size < 0) {
4719
        err = socket_error();
4720
        if (err != EWOULDBLOCK)
4721
            goto eoc;
4722
    } else if (size == 0) {
4723
        /* end of connection */
4724
    eoc:
4725
        qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
4726
        closesocket(s->fd);
4727
        return;
4728
    }
4729
    buf = buf1;
4730
    while (size > 0) {
4731
        /* reassemble a packet from the network */
4732
        switch(s->state) {
4733
        case 0:
4734
            l = 4 - s->index;
4735
            if (l > size)
4736
                l = size;
4737
            memcpy(s->buf + s->index, buf, l);
4738
            buf += l;
4739
            size -= l;
4740
            s->index += l;
4741
            if (s->index == 4) {
4742
                /* got length */
4743
                s->packet_len = ntohl(*(uint32_t *)s->buf);
4744
                s->index = 0;
4745
                s->state = 1;
4746
            }
4747
            break;
4748
        case 1:
4749
            l = s->packet_len - s->index;
4750
            if (l > size)
4751
                l = size;
4752
            memcpy(s->buf + s->index, buf, l);
4753
            s->index += l;
4754
            buf += l;
4755
            size -= l;
4756
            if (s->index >= s->packet_len) {
4757
                qemu_send_packet(s->vc, s->buf, s->packet_len);
4758
                s->index = 0;
4759
                s->state = 0;
4760
            }
4761
            break;
4762
        }
4763
    }
4764
}
4765

    
4766
static void net_socket_send_dgram(void *opaque)
4767
{
4768
    NetSocketState *s = opaque;
4769
    int size;
4770

    
4771
    size = recv(s->fd, s->buf, sizeof(s->buf), 0);
4772
    if (size < 0)
4773
        return;
4774
    if (size == 0) {
4775
        /* end of connection */
4776
        qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
4777
        return;
4778
    }
4779
    qemu_send_packet(s->vc, s->buf, size);
4780
}
4781

    
4782
static int net_socket_mcast_create(struct sockaddr_in *mcastaddr)
4783
{
4784
    struct ip_mreq imr;
4785
    int fd;
4786
    int val, ret;
4787
    if (!IN_MULTICAST(ntohl(mcastaddr->sin_addr.s_addr))) {
4788
        fprintf(stderr, "qemu: error: specified mcastaddr \"%s\" (0x%08x) does not contain a multicast address\n",
4789
                inet_ntoa(mcastaddr->sin_addr),
4790
                (int)ntohl(mcastaddr->sin_addr.s_addr));
4791
        return -1;
4792

    
4793
    }
4794
    fd = socket(PF_INET, SOCK_DGRAM, 0);
4795
    if (fd < 0) {
4796
        perror("socket(PF_INET, SOCK_DGRAM)");
4797
        return -1;
4798
    }
4799

    
4800
    val = 1;
4801
    ret=setsockopt(fd, SOL_SOCKET, SO_REUSEADDR,
4802
                   (const char *)&val, sizeof(val));
4803
    if (ret < 0) {
4804
        perror("setsockopt(SOL_SOCKET, SO_REUSEADDR)");
4805
        goto fail;
4806
    }
4807

    
4808
    ret = bind(fd, (struct sockaddr *)mcastaddr, sizeof(*mcastaddr));
4809
    if (ret < 0) {
4810
        perror("bind");
4811
        goto fail;
4812
    }
4813

    
4814
    /* Add host to multicast group */
4815
    imr.imr_multiaddr = mcastaddr->sin_addr;
4816
    imr.imr_interface.s_addr = htonl(INADDR_ANY);
4817

    
4818
    ret = setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP,
4819
                     (const char *)&imr, sizeof(struct ip_mreq));
4820
    if (ret < 0) {
4821
        perror("setsockopt(IP_ADD_MEMBERSHIP)");
4822
        goto fail;
4823
    }
4824

    
4825
    /* Force mcast msgs to loopback (eg. several QEMUs in same host */
4826
    val = 1;
4827
    ret=setsockopt(fd, IPPROTO_IP, IP_MULTICAST_LOOP,
4828
                   (const char *)&val, sizeof(val));
4829
    if (ret < 0) {
4830
        perror("setsockopt(SOL_IP, IP_MULTICAST_LOOP)");
4831
        goto fail;
4832
    }
4833

    
4834
    socket_set_nonblock(fd);
4835
    return fd;
4836
fail:
4837
    if (fd >= 0)
4838
        closesocket(fd);
4839
    return -1;
4840
}
4841

    
4842
static NetSocketState *net_socket_fd_init_dgram(VLANState *vlan, int fd,
4843
                                          int is_connected)
4844
{
4845
    struct sockaddr_in saddr;
4846
    int newfd;
4847
    socklen_t saddr_len;
4848
    NetSocketState *s;
4849

    
4850
    /* fd passed: multicast: "learn" dgram_dst address from bound address and save it
4851
     * Because this may be "shared" socket from a "master" process, datagrams would be recv()
4852
     * by ONLY ONE process: we must "clone" this dgram socket --jjo
4853
     */
4854

    
4855
    if (is_connected) {
4856
        if (getsockname(fd, (struct sockaddr *) &saddr, &saddr_len) == 0) {
4857
            /* must be bound */
4858
            if (saddr.sin_addr.s_addr==0) {
4859
                fprintf(stderr, "qemu: error: init_dgram: fd=%d unbound, cannot setup multicast dst addr\n",
4860
                        fd);
4861
                return NULL;
4862
            }
4863
            /* clone dgram socket */
4864
            newfd = net_socket_mcast_create(&saddr);
4865
            if (newfd < 0) {
4866
                /* error already reported by net_socket_mcast_create() */
4867
                close(fd);
4868
                return NULL;
4869
            }
4870
            /* clone newfd to fd, close newfd */
4871
            dup2(newfd, fd);
4872
            close(newfd);
4873

    
4874
        } else {
4875
            fprintf(stderr, "qemu: error: init_dgram: fd=%d failed getsockname(): %s\n",
4876
                    fd, strerror(errno));
4877
            return NULL;
4878
        }
4879
    }
4880

    
4881
    s = qemu_mallocz(sizeof(NetSocketState));
4882
    if (!s)
4883
        return NULL;
4884
    s->fd = fd;
4885

    
4886
    s->vc = qemu_new_vlan_client(vlan, net_socket_receive_dgram, NULL, s);
4887
    qemu_set_fd_handler(s->fd, net_socket_send_dgram, NULL, s);
4888

    
4889
    /* mcast: save bound address as dst */
4890
    if (is_connected) s->dgram_dst=saddr;
4891

    
4892
    snprintf(s->vc->info_str, sizeof(s->vc->info_str),
4893
            "socket: fd=%d (%s mcast=%s:%d)",
4894
            fd, is_connected? "cloned" : "",
4895
            inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
4896
    return s;
4897
}
4898

    
4899
static void net_socket_connect(void *opaque)
4900
{
4901
    NetSocketState *s = opaque;
4902
    qemu_set_fd_handler(s->fd, net_socket_send, NULL, s);
4903
}
4904

    
4905
static NetSocketState *net_socket_fd_init_stream(VLANState *vlan, int fd,
4906
                                          int is_connected)
4907
{
4908
    NetSocketState *s;
4909
    s = qemu_mallocz(sizeof(NetSocketState));
4910
    if (!s)
4911
        return NULL;
4912
    s->fd = fd;
4913
    s->vc = qemu_new_vlan_client(vlan,
4914
                                 net_socket_receive, NULL, s);
4915
    snprintf(s->vc->info_str, sizeof(s->vc->info_str),
4916
             "socket: fd=%d", fd);
4917
    if (is_connected) {
4918
        net_socket_connect(s);
4919
    } else {
4920
        qemu_set_fd_handler(s->fd, NULL, net_socket_connect, s);
4921
    }
4922
    return s;
4923
}
4924

    
4925
static NetSocketState *net_socket_fd_init(VLANState *vlan, int fd,
4926
                                          int is_connected)
4927
{
4928
    int so_type=-1, optlen=sizeof(so_type);
4929

    
4930
    if(getsockopt(fd, SOL_SOCKET, SO_TYPE, (char *)&so_type,
4931
        (socklen_t *)&optlen)< 0) {
4932
        fprintf(stderr, "qemu: error: getsockopt(SO_TYPE) for fd=%d failed\n", fd);
4933
        return NULL;
4934
    }
4935
    switch(so_type) {
4936
    case SOCK_DGRAM:
4937
        return net_socket_fd_init_dgram(vlan, fd, is_connected);
4938
    case SOCK_STREAM:
4939
        return net_socket_fd_init_stream(vlan, fd, is_connected);
4940
    default:
4941
        /* who knows ... this could be a eg. a pty, do warn and continue as stream */
4942
        fprintf(stderr, "qemu: warning: socket type=%d for fd=%d is not SOCK_DGRAM or SOCK_STREAM\n", so_type, fd);
4943
        return net_socket_fd_init_stream(vlan, fd, is_connected);
4944
    }
4945
    return NULL;
4946
}
4947

    
4948
static void net_socket_accept(void *opaque)
4949
{
4950
    NetSocketListenState *s = opaque;
4951
    NetSocketState *s1;
4952
    struct sockaddr_in saddr;
4953
    socklen_t len;
4954
    int fd;
4955

    
4956
    for(;;) {
4957
        len = sizeof(saddr);
4958
        fd = accept(s->fd, (struct sockaddr *)&saddr, &len);
4959
        if (fd < 0 && errno != EINTR) {
4960
            return;
4961
        } else if (fd >= 0) {
4962
            break;
4963
        }
4964
    }
4965
    s1 = net_socket_fd_init(s->vlan, fd, 1);
4966
    if (!s1) {
4967
        closesocket(fd);
4968
    } else {
4969
        snprintf(s1->vc->info_str, sizeof(s1->vc->info_str),
4970
                 "socket: connection from %s:%d",
4971
                 inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
4972
    }
4973
}
4974

    
4975
static int net_socket_listen_init(VLANState *vlan, const char *host_str)
4976
{
4977
    NetSocketListenState *s;
4978
    int fd, val, ret;
4979
    struct sockaddr_in saddr;
4980

    
4981
    if (parse_host_port(&saddr, host_str) < 0)
4982
        return -1;
4983

    
4984
    s = qemu_mallocz(sizeof(NetSocketListenState));
4985
    if (!s)
4986
        return -1;
4987

    
4988
    fd = socket(PF_INET, SOCK_STREAM, 0);
4989
    if (fd < 0) {
4990
        perror("socket");
4991
        return -1;
4992
    }
4993
    socket_set_nonblock(fd);
4994

    
4995
    /* allow fast reuse */
4996
    val = 1;
4997
    setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const char *)&val, sizeof(val));
4998

    
4999
    ret = bind(fd, (struct sockaddr *)&saddr, sizeof(saddr));
5000
    if (ret < 0) {
5001
        perror("bind");
5002
        return -1;
5003
    }
5004
    ret = listen(fd, 0);
5005
    if (ret < 0) {
5006
        perror("listen");
5007
        return -1;
5008
    }
5009
    s->vlan = vlan;
5010
    s->fd = fd;
5011
    qemu_set_fd_handler(fd, net_socket_accept, NULL, s);
5012
    return 0;
5013
}
5014

    
5015
static int net_socket_connect_init(VLANState *vlan, const char *host_str)
5016
{
5017
    NetSocketState *s;
5018
    int fd, connected, ret, err;
5019
    struct sockaddr_in saddr;
5020

    
5021
    if (parse_host_port(&saddr, host_str) < 0)
5022
        return -1;
5023

    
5024
    fd = socket(PF_INET, SOCK_STREAM, 0);
5025
    if (fd < 0) {
5026
        perror("socket");
5027
        return -1;
5028
    }
5029
    socket_set_nonblock(fd);
5030

    
5031
    connected = 0;
5032
    for(;;) {
5033
        ret = connect(fd, (struct sockaddr *)&saddr, sizeof(saddr));
5034
        if (ret < 0) {
5035
            err = socket_error();
5036
            if (err == EINTR || err == EWOULDBLOCK) {
5037
            } else if (err == EINPROGRESS) {
5038
                break;
5039
#ifdef _WIN32
5040
            } else if (err == WSAEALREADY) {
5041
                break;
5042
#endif
5043
            } else {
5044
                perror("connect");
5045
                closesocket(fd);
5046
                return -1;
5047
            }
5048
        } else {
5049
            connected = 1;
5050
            break;
5051
        }
5052
    }
5053
    s = net_socket_fd_init(vlan, fd, connected);
5054
    if (!s)
5055
        return -1;
5056
    snprintf(s->vc->info_str, sizeof(s->vc->info_str),
5057
             "socket: connect to %s:%d",
5058
             inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
5059
    return 0;
5060
}
5061

    
5062
static int net_socket_mcast_init(VLANState *vlan, const char *host_str)
5063
{
5064
    NetSocketState *s;
5065
    int fd;
5066
    struct sockaddr_in saddr;
5067

    
5068
    if (parse_host_port(&saddr, host_str) < 0)
5069
        return -1;
5070

    
5071

    
5072
    fd = net_socket_mcast_create(&saddr);
5073
    if (fd < 0)
5074
        return -1;
5075

    
5076
    s = net_socket_fd_init(vlan, fd, 0);
5077
    if (!s)
5078
        return -1;
5079

    
5080
    s->dgram_dst = saddr;
5081

    
5082
    snprintf(s->vc->info_str, sizeof(s->vc->info_str),
5083
             "socket: mcast=%s:%d",
5084
             inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
5085
    return 0;
5086

    
5087
}
5088

    
5089
static const char *get_opt_name(char *buf, int buf_size, const char *p)
5090
{
5091
    char *q;
5092

    
5093
    q = buf;
5094
    while (*p != '\0' && *p != '=') {
5095
        if (q && (q - buf) < buf_size - 1)
5096
            *q++ = *p;
5097
        p++;
5098
    }
5099
    if (q)
5100
        *q = '\0';
5101

    
5102
    return p;
5103
}
5104

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

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

    
5123
    return p;
5124
}
5125

    
5126
static int get_param_value(char *buf, int buf_size,
5127
                           const char *tag, const char *str)
5128
{
5129
    const char *p;
5130
    char option[128];
5131

    
5132
    p = str;
5133
    for(;;) {
5134
        p = get_opt_name(option, sizeof(option), p);
5135
        if (*p != '=')
5136
            break;
5137
        p++;
5138
        if (!strcmp(tag, option)) {
5139
            (void)get_opt_value(buf, buf_size, p);
5140
            return strlen(buf);
5141
        } else {
5142
            p = get_opt_value(NULL, 0, p);
5143
        }
5144
        if (*p != ',')
5145
            break;
5146
        p++;
5147
    }
5148
    return 0;
5149
}
5150

    
5151
static int check_params(char *buf, int buf_size,
5152
                        char **params, const char *str)
5153
{
5154
    const char *p;
5155
    int i;
5156

    
5157
    p = str;
5158
    for(;;) {
5159
        p = get_opt_name(buf, buf_size, p);
5160
        if (*p != '=')
5161
            return -1;
5162
        p++;
5163
        for(i = 0; params[i] != NULL; i++)
5164
            if (!strcmp(params[i], buf))
5165
                break;
5166
        if (params[i] == NULL)
5167
            return -1;
5168
        p = get_opt_value(NULL, 0, p);
5169
        if (*p != ',')
5170
            break;
5171
        p++;
5172
    }
5173
    return 0;
5174
}
5175

    
5176
static int net_client_init(const char *device, const char *p)
5177
{
5178
    char buf[1024];
5179
    int vlan_id, ret;
5180
    VLANState *vlan;
5181

    
5182
    vlan_id = 0;
5183
    if (get_param_value(buf, sizeof(buf), "vlan", p)) {
5184
        vlan_id = strtol(buf, NULL, 0);
5185
    }
5186
    vlan = qemu_find_vlan(vlan_id);
5187
    if (!vlan) {
5188
        fprintf(stderr, "Could not create vlan %d\n", vlan_id);
5189
        return -1;
5190
    }
5191
    if (!strcmp(device, "nic")) {
5192
        NICInfo *nd;
5193
        uint8_t *macaddr;
5194

    
5195
        if (nb_nics >= MAX_NICS) {
5196
            fprintf(stderr, "Too Many NICs\n");
5197
            return -1;
5198
        }
5199
        nd = &nd_table[nb_nics];
5200
        macaddr = nd->macaddr;
5201
        macaddr[0] = 0x52;
5202
        macaddr[1] = 0x54;
5203
        macaddr[2] = 0x00;
5204
        macaddr[3] = 0x12;
5205
        macaddr[4] = 0x34;
5206
        macaddr[5] = 0x56 + nb_nics;
5207

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

    
5323
    return ret;
5324
}
5325

    
5326
static int net_client_parse(const char *str)
5327
{
5328
    const char *p;
5329
    char *q;
5330
    char device[64];
5331

    
5332
    p = str;
5333
    q = device;
5334
    while (*p != '\0' && *p != ',') {
5335
        if ((q - device) < sizeof(device) - 1)
5336
            *q++ = *p;
5337
        p++;
5338
    }
5339
    *q = '\0';
5340
    if (*p == ',')
5341
        p++;
5342

    
5343
    return net_client_init(device, p);
5344
}
5345

    
5346
void do_info_network(void)
5347
{
5348
    VLANState *vlan;
5349
    VLANClientState *vc;
5350

    
5351
    for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) {
5352
        term_printf("VLAN %d devices:\n", vlan->id);
5353
        for(vc = vlan->first_client; vc != NULL; vc = vc->next)
5354
            term_printf("  %s\n", vc->info_str);
5355
    }
5356
}
5357

    
5358
#define HD_ALIAS "index=%d,media=disk"
5359
#ifdef TARGET_PPC
5360
#define CDROM_ALIAS "index=1,media=cdrom"
5361
#else
5362
#define CDROM_ALIAS "index=2,media=cdrom"
5363
#endif
5364
#define FD_ALIAS "index=%d,if=floppy"
5365
#define PFLASH_ALIAS "if=pflash"
5366
#define MTD_ALIAS "if=mtd"
5367
#define SD_ALIAS "index=0,if=sd"
5368

    
5369
static int drive_add(const char *file, const char *fmt, ...)
5370
{
5371
    va_list ap;
5372

    
5373
    if (nb_drives_opt >= MAX_DRIVES) {
5374
        fprintf(stderr, "qemu: too many drives\n");
5375
        exit(1);
5376
    }
5377

    
5378
    drives_opt[nb_drives_opt].file = file;
5379
    va_start(ap, fmt);
5380
    vsnprintf(drives_opt[nb_drives_opt].opt,
5381
              sizeof(drives_opt[0].opt), fmt, ap);
5382
    va_end(ap);
5383

    
5384
    return nb_drives_opt++;
5385
}
5386

    
5387
int drive_get_index(BlockInterfaceType type, int bus, int unit)
5388
{
5389
    int index;
5390

    
5391
    /* seek interface, bus and unit */
5392

    
5393
    for (index = 0; index < nb_drives; index++)
5394
        if (drives_table[index].type == type &&
5395
            drives_table[index].bus == bus &&
5396
            drives_table[index].unit == unit)
5397
        return index;
5398

    
5399
    return -1;
5400
}
5401

    
5402
int drive_get_max_bus(BlockInterfaceType type)
5403
{
5404
    int max_bus;
5405
    int index;
5406

    
5407
    max_bus = -1;
5408
    for (index = 0; index < nb_drives; index++) {
5409
        if(drives_table[index].type == type &&
5410
           drives_table[index].bus > max_bus)
5411
            max_bus = drives_table[index].bus;
5412
    }
5413
    return max_bus;
5414
}
5415

    
5416
static void bdrv_format_print(void *opaque, const char *name)
5417
{
5418
    fprintf(stderr, " %s", name);
5419
}
5420

    
5421
static int drive_init(struct drive_opt *arg, int snapshot,
5422
                      QEMUMachine *machine)
5423
{
5424
    char buf[128];
5425
    char file[1024];
5426
    char devname[128];
5427
    const char *mediastr = "";
5428
    BlockInterfaceType type;
5429
    enum { MEDIA_DISK, MEDIA_CDROM } media;
5430
    int bus_id, unit_id;
5431
    int cyls, heads, secs, translation;
5432
    BlockDriverState *bdrv;
5433
    BlockDriver *drv = NULL;
5434
    int max_devs;
5435
    int index;
5436
    int cache;
5437
    int bdrv_flags;
5438
    char *str = arg->opt;
5439
    char *params[] = { "bus", "unit", "if", "index", "cyls", "heads",
5440
                       "secs", "trans", "media", "snapshot", "file",
5441
                       "cache", "format", NULL };
5442

    
5443
    if (check_params(buf, sizeof(buf), params, str) < 0) {
5444
         fprintf(stderr, "qemu: unknown parameter '%s' in '%s'\n",
5445
                         buf, str);
5446
         return -1;
5447
    }
5448

    
5449
    file[0] = 0;
5450
    cyls = heads = secs = 0;
5451
    bus_id = 0;
5452
    unit_id = -1;
5453
    translation = BIOS_ATA_TRANSLATION_AUTO;
5454
    index = -1;
5455
    cache = 1;
5456

    
5457
    if (!strcmp(machine->name, "realview") ||
5458
        !strcmp(machine->name, "SS-5") ||
5459
        !strcmp(machine->name, "SS-10") ||
5460
        !strcmp(machine->name, "SS-600MP") ||
5461
        !strcmp(machine->name, "versatilepb") ||
5462
        !strcmp(machine->name, "versatileab")) {
5463
        type = IF_SCSI;
5464
        max_devs = MAX_SCSI_DEVS;
5465
        pstrcpy(devname, sizeof(devname), "scsi");
5466
    } else {
5467
        type = IF_IDE;
5468
        max_devs = MAX_IDE_DEVS;
5469
        pstrcpy(devname, sizeof(devname), "ide");
5470
    }
5471
    media = MEDIA_DISK;
5472

    
5473
    /* extract parameters */
5474

    
5475
    if (get_param_value(buf, sizeof(buf), "bus", str)) {
5476
        bus_id = strtol(buf, NULL, 0);
5477
        if (bus_id < 0) {
5478
            fprintf(stderr, "qemu: '%s' invalid bus id\n", str);
5479
            return -1;
5480
        }
5481
    }
5482

    
5483
    if (get_param_value(buf, sizeof(buf), "unit", str)) {
5484
        unit_id = strtol(buf, NULL, 0);
5485
        if (unit_id < 0) {
5486
            fprintf(stderr, "qemu: '%s' invalid unit id\n", str);
5487
            return -1;
5488
        }
5489
    }
5490

    
5491
    if (get_param_value(buf, sizeof(buf), "if", str)) {
5492
        pstrcpy(devname, sizeof(devname), buf);
5493
        if (!strcmp(buf, "ide")) {
5494
            type = IF_IDE;
5495
            max_devs = MAX_IDE_DEVS;
5496
        } else if (!strcmp(buf, "scsi")) {
5497
            type = IF_SCSI;
5498
            max_devs = MAX_SCSI_DEVS;
5499
        } else if (!strcmp(buf, "floppy")) {
5500
            type = IF_FLOPPY;
5501
            max_devs = 0;
5502
        } else if (!strcmp(buf, "pflash")) {
5503
            type = IF_PFLASH;
5504
            max_devs = 0;
5505
        } else if (!strcmp(buf, "mtd")) {
5506
            type = IF_MTD;
5507
            max_devs = 0;
5508
        } else if (!strcmp(buf, "sd")) {
5509
            type = IF_SD;
5510
            max_devs = 0;
5511
        } else {
5512
            fprintf(stderr, "qemu: '%s' unsupported bus type '%s'\n", str, buf);
5513
            return -1;
5514
        }
5515
    }
5516

    
5517
    if (get_param_value(buf, sizeof(buf), "index", str)) {
5518
        index = strtol(buf, NULL, 0);
5519
        if (index < 0) {
5520
            fprintf(stderr, "qemu: '%s' invalid index\n", str);
5521
            return -1;
5522
        }
5523
    }
5524

    
5525
    if (get_param_value(buf, sizeof(buf), "cyls", str)) {
5526
        cyls = strtol(buf, NULL, 0);
5527
    }
5528

    
5529
    if (get_param_value(buf, sizeof(buf), "heads", str)) {
5530
        heads = strtol(buf, NULL, 0);
5531
    }
5532

    
5533
    if (get_param_value(buf, sizeof(buf), "secs", str)) {
5534
        secs = strtol(buf, NULL, 0);
5535
    }
5536

    
5537
    if (cyls || heads || secs) {
5538
        if (cyls < 1 || cyls > 16383) {
5539
            fprintf(stderr, "qemu: '%s' invalid physical cyls number\n", str);
5540
            return -1;
5541
        }
5542
        if (heads < 1 || heads > 16) {
5543
            fprintf(stderr, "qemu: '%s' invalid physical heads number\n", str);
5544
            return -1;
5545
        }
5546
        if (secs < 1 || secs > 63) {
5547
            fprintf(stderr, "qemu: '%s' invalid physical secs number\n", str);
5548
            return -1;
5549
        }
5550
    }
5551

    
5552
    if (get_param_value(buf, sizeof(buf), "trans", str)) {
5553
        if (!cyls) {
5554
            fprintf(stderr,
5555
                    "qemu: '%s' trans must be used with cyls,heads and secs\n",
5556
                    str);
5557
            return -1;
5558
        }
5559
        if (!strcmp(buf, "none"))
5560
            translation = BIOS_ATA_TRANSLATION_NONE;
5561
        else if (!strcmp(buf, "lba"))
5562
            translation = BIOS_ATA_TRANSLATION_LBA;
5563
        else if (!strcmp(buf, "auto"))
5564
            translation = BIOS_ATA_TRANSLATION_AUTO;
5565
        else {
5566
            fprintf(stderr, "qemu: '%s' invalid translation type\n", str);
5567
            return -1;
5568
        }
5569
    }
5570

    
5571
    if (get_param_value(buf, sizeof(buf), "media", str)) {
5572
        if (!strcmp(buf, "disk")) {
5573
            media = MEDIA_DISK;
5574
        } else if (!strcmp(buf, "cdrom")) {
5575
            if (cyls || secs || heads) {
5576
                fprintf(stderr,
5577
                        "qemu: '%s' invalid physical CHS format\n", str);
5578
                return -1;
5579
            }
5580
            media = MEDIA_CDROM;
5581
        } else {
5582
            fprintf(stderr, "qemu: '%s' invalid media\n", str);
5583
            return -1;
5584
        }
5585
    }
5586

    
5587
    if (get_param_value(buf, sizeof(buf), "snapshot", str)) {
5588
        if (!strcmp(buf, "on"))
5589
            snapshot = 1;
5590
        else if (!strcmp(buf, "off"))
5591
            snapshot = 0;
5592
        else {
5593
            fprintf(stderr, "qemu: '%s' invalid snapshot option\n", str);
5594
            return -1;
5595
        }
5596
    }
5597

    
5598
    if (get_param_value(buf, sizeof(buf), "cache", str)) {
5599
        if (!strcmp(buf, "off"))
5600
            cache = 0;
5601
        else if (!strcmp(buf, "on"))
5602
            cache = 1;
5603
        else {
5604
           fprintf(stderr, "qemu: invalid cache option\n");
5605
           return -1;
5606
        }
5607
    }
5608

    
5609
    if (get_param_value(buf, sizeof(buf), "format", str)) {
5610
       if (strcmp(buf, "?") == 0) {
5611
            fprintf(stderr, "qemu: Supported formats:");
5612
            bdrv_iterate_format(bdrv_format_print, NULL);
5613
            fprintf(stderr, "\n");
5614
            return -1;
5615
        }
5616
        drv = bdrv_find_format(buf);
5617
        if (!drv) {
5618
            fprintf(stderr, "qemu: '%s' invalid format\n", buf);
5619
            return -1;
5620
        }
5621
    }
5622

    
5623
    if (arg->file == NULL)
5624
        get_param_value(file, sizeof(file), "file", str);
5625
    else
5626
        pstrcpy(file, sizeof(file), arg->file);
5627

    
5628
    /* compute bus and unit according index */
5629

    
5630
    if (index != -1) {
5631
        if (bus_id != 0 || unit_id != -1) {
5632
            fprintf(stderr,
5633
                    "qemu: '%s' index cannot be used with bus and unit\n", str);
5634
            return -1;
5635
        }
5636
        if (max_devs == 0)
5637
        {
5638
            unit_id = index;
5639
            bus_id = 0;
5640
        } else {
5641
            unit_id = index % max_devs;
5642
            bus_id = index / max_devs;
5643
        }
5644
    }
5645

    
5646
    /* if user doesn't specify a unit_id,
5647
     * try to find the first free
5648
     */
5649

    
5650
    if (unit_id == -1) {
5651
       unit_id = 0;
5652
       while (drive_get_index(type, bus_id, unit_id) != -1) {
5653
           unit_id++;
5654
           if (max_devs && unit_id >= max_devs) {
5655
               unit_id -= max_devs;
5656
               bus_id++;
5657
           }
5658
       }
5659
    }
5660

    
5661
    /* check unit id */
5662

    
5663
    if (max_devs && unit_id >= max_devs) {
5664
        fprintf(stderr, "qemu: '%s' unit %d too big (max is %d)\n",
5665
                        str, unit_id, max_devs - 1);
5666
        return -1;
5667
    }
5668

    
5669
    /*
5670
     * ignore multiple definitions
5671
     */
5672

    
5673
    if (drive_get_index(type, bus_id, unit_id) != -1)
5674
        return 0;
5675

    
5676
    /* init */
5677

    
5678
    if (type == IF_IDE || type == IF_SCSI)
5679
        mediastr = (media == MEDIA_CDROM) ? "-cd" : "-hd";
5680
    if (max_devs)
5681
        snprintf(buf, sizeof(buf), "%s%i%s%i",
5682
                 devname, bus_id, mediastr, unit_id);
5683
    else
5684
        snprintf(buf, sizeof(buf), "%s%s%i",
5685
                 devname, mediastr, unit_id);
5686
    bdrv = bdrv_new(buf);
5687
    drives_table[nb_drives].bdrv = bdrv;
5688
    drives_table[nb_drives].type = type;
5689
    drives_table[nb_drives].bus = bus_id;
5690
    drives_table[nb_drives].unit = unit_id;
5691
    nb_drives++;
5692

    
5693
    switch(type) {
5694
    case IF_IDE:
5695
    case IF_SCSI:
5696
        switch(media) {
5697
        case MEDIA_DISK:
5698
            if (cyls != 0) {
5699
                bdrv_set_geometry_hint(bdrv, cyls, heads, secs);
5700
                bdrv_set_translation_hint(bdrv, translation);
5701
            }
5702
            break;
5703
        case MEDIA_CDROM:
5704
            bdrv_set_type_hint(bdrv, BDRV_TYPE_CDROM);
5705
            break;
5706
        }
5707
        break;
5708
    case IF_SD:
5709
        /* FIXME: This isn't really a floppy, but it's a reasonable
5710
           approximation.  */
5711
    case IF_FLOPPY:
5712
        bdrv_set_type_hint(bdrv, BDRV_TYPE_FLOPPY);
5713
        break;
5714
    case IF_PFLASH:
5715
    case IF_MTD:
5716
        break;
5717
    }
5718
    if (!file[0])
5719
        return 0;
5720
    bdrv_flags = 0;
5721
    if (snapshot)
5722
        bdrv_flags |= BDRV_O_SNAPSHOT;
5723
    if (!cache)
5724
        bdrv_flags |= BDRV_O_DIRECT;
5725
    if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0 || qemu_key_check(bdrv, file)) {
5726
        fprintf(stderr, "qemu: could not open disk image %s\n",
5727
                        file);
5728
        return -1;
5729
    }
5730
    return 0;
5731
}
5732

    
5733
/***********************************************************/
5734
/* USB devices */
5735

    
5736
static USBPort *used_usb_ports;
5737
static USBPort *free_usb_ports;
5738

    
5739
/* ??? Maybe change this to register a hub to keep track of the topology.  */
5740
void qemu_register_usb_port(USBPort *port, void *opaque, int index,
5741
                            usb_attachfn attach)
5742
{
5743
    port->opaque = opaque;
5744
    port->index = index;
5745
    port->attach = attach;
5746
    port->next = free_usb_ports;
5747
    free_usb_ports = port;
5748
}
5749

    
5750
int usb_device_add_dev(USBDevice *dev)
5751
{
5752
    USBPort *port;
5753

    
5754
    /* Find a USB port to add the device to.  */
5755
    port = free_usb_ports;
5756
    if (!port->next) {
5757
        USBDevice *hub;
5758

    
5759
        /* Create a new hub and chain it on.  */
5760
        free_usb_ports = NULL;
5761
        port->next = used_usb_ports;
5762
        used_usb_ports = port;
5763

    
5764
        hub = usb_hub_init(VM_USB_HUB_SIZE);
5765
        usb_attach(port, hub);
5766
        port = free_usb_ports;
5767
    }
5768

    
5769
    free_usb_ports = port->next;
5770
    port->next = used_usb_ports;
5771
    used_usb_ports = port;
5772
    usb_attach(port, dev);
5773
    return 0;
5774
}
5775

    
5776
static int usb_device_add(const char *devname)
5777
{
5778
    const char *p;
5779
    USBDevice *dev;
5780
    USBPort *port;
5781

    
5782
    if (!free_usb_ports)
5783
        return -1;
5784

    
5785
    if (strstart(devname, "host:", &p)) {
5786
        dev = usb_host_device_open(p);
5787
    } else if (!strcmp(devname, "mouse")) {
5788
        dev = usb_mouse_init();
5789
    } else if (!strcmp(devname, "tablet")) {
5790
        dev = usb_tablet_init();
5791
    } else if (!strcmp(devname, "keyboard")) {
5792
        dev = usb_keyboard_init();
5793
    } else if (strstart(devname, "disk:", &p)) {
5794
        dev = usb_msd_init(p);
5795
    } else if (!strcmp(devname, "wacom-tablet")) {
5796
        dev = usb_wacom_init();
5797
    } else if (strstart(devname, "serial:", &p)) {
5798
        dev = usb_serial_init(p);
5799
#ifdef CONFIG_BRLAPI
5800
    } else if (!strcmp(devname, "braille")) {
5801
        dev = usb_baum_init();
5802
#endif
5803
    } else if (strstart(devname, "net:", &p)) {
5804
        int nic = nb_nics;
5805

    
5806
        if (net_client_init("nic", p) < 0)
5807
            return -1;
5808
        nd_table[nic].model = "usb";
5809
        dev = usb_net_init(&nd_table[nic]);
5810
    } else {
5811
        return -1;
5812
    }
5813
    if (!dev)
5814
        return -1;
5815

    
5816
    return usb_device_add_dev(dev);
5817
}
5818

    
5819
int usb_device_del_addr(int bus_num, int addr)
5820
{
5821
    USBPort *port;
5822
    USBPort **lastp;
5823
    USBDevice *dev;
5824

    
5825
    if (!used_usb_ports)
5826
        return -1;
5827

    
5828
    if (bus_num != 0)
5829
        return -1;
5830

    
5831
    lastp = &used_usb_ports;
5832
    port = used_usb_ports;
5833
    while (port && port->dev->addr != addr) {
5834
        lastp = &port->next;
5835
        port = port->next;
5836
    }
5837

    
5838
    if (!port)
5839
        return -1;
5840

    
5841
    dev = port->dev;
5842
    *lastp = port->next;
5843
    usb_attach(port, NULL);
5844
    dev->handle_destroy(dev);
5845
    port->next = free_usb_ports;
5846
    free_usb_ports = port;
5847
    return 0;
5848
}
5849

    
5850
static int usb_device_del(const char *devname)
5851
{
5852
    int bus_num, addr;
5853
    const char *p;
5854

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

    
5858
    p = strchr(devname, '.');
5859
    if (!p)
5860
        return -1;
5861
    bus_num = strtoul(devname, NULL, 0);
5862
    addr = strtoul(p + 1, NULL, 0);
5863

    
5864
    return usb_device_del_addr(bus_num, addr);
5865
}
5866

    
5867
void do_usb_add(const char *devname)
5868
{
5869
    usb_device_add(devname);
5870
}
5871

    
5872
void do_usb_del(const char *devname)
5873
{
5874
    usb_device_del(devname);
5875
}
5876

    
5877
void usb_info(void)
5878
{
5879
    USBDevice *dev;
5880
    USBPort *port;
5881
    const char *speed_str;
5882

    
5883
    if (!usb_enabled) {
5884
        term_printf("USB support not enabled\n");
5885
        return;
5886
    }
5887

    
5888
    for (port = used_usb_ports; port; port = port->next) {
5889
        dev = port->dev;
5890
        if (!dev)
5891
            continue;
5892
        switch(dev->speed) {
5893
        case USB_SPEED_LOW:
5894
            speed_str = "1.5";
5895
            break;
5896
        case USB_SPEED_FULL:
5897
            speed_str = "12";
5898
            break;
5899
        case USB_SPEED_HIGH:
5900
            speed_str = "480";
5901
            break;
5902
        default:
5903
            speed_str = "?";
5904
            break;
5905
        }
5906
        term_printf("  Device %d.%d, Speed %s Mb/s, Product %s\n",
5907
                    0, dev->addr, speed_str, dev->devname);
5908
    }
5909
}
5910

    
5911
/***********************************************************/
5912
/* PCMCIA/Cardbus */
5913

    
5914
static struct pcmcia_socket_entry_s {
5915
    struct pcmcia_socket_s *socket;
5916
    struct pcmcia_socket_entry_s *next;
5917
} *pcmcia_sockets = 0;
5918

    
5919
void pcmcia_socket_register(struct pcmcia_socket_s *socket)
5920
{
5921
    struct pcmcia_socket_entry_s *entry;
5922

    
5923
    entry = qemu_malloc(sizeof(struct pcmcia_socket_entry_s));
5924
    entry->socket = socket;
5925
    entry->next = pcmcia_sockets;
5926
    pcmcia_sockets = entry;
5927
}
5928

    
5929
void pcmcia_socket_unregister(struct pcmcia_socket_s *socket)
5930
{
5931
    struct pcmcia_socket_entry_s *entry, **ptr;
5932

    
5933
    ptr = &pcmcia_sockets;
5934
    for (entry = *ptr; entry; ptr = &entry->next, entry = *ptr)
5935
        if (entry->socket == socket) {
5936
            *ptr = entry->next;
5937
            qemu_free(entry);
5938
        }
5939
}
5940

    
5941
void pcmcia_info(void)
5942
{
5943
    struct pcmcia_socket_entry_s *iter;
5944
    if (!pcmcia_sockets)
5945
        term_printf("No PCMCIA sockets\n");
5946

    
5947
    for (iter = pcmcia_sockets; iter; iter = iter->next)
5948
        term_printf("%s: %s\n", iter->socket->slot_string,
5949
                    iter->socket->attached ? iter->socket->card_string :
5950
                    "Empty");
5951
}
5952

    
5953
/***********************************************************/
5954
/* dumb display */
5955

    
5956
static void dumb_update(DisplayState *ds, int x, int y, int w, int h)
5957
{
5958
}
5959

    
5960
static void dumb_resize(DisplayState *ds, int w, int h)
5961
{
5962
}
5963

    
5964
static void dumb_refresh(DisplayState *ds)
5965
{
5966
#if defined(CONFIG_SDL)
5967
    vga_hw_update();
5968
#endif
5969
}
5970

    
5971
static void dumb_display_init(DisplayState *ds)
5972
{
5973
    ds->data = NULL;
5974
    ds->linesize = 0;
5975
    ds->depth = 0;
5976
    ds->dpy_update = dumb_update;
5977
    ds->dpy_resize = dumb_resize;
5978
    ds->dpy_refresh = dumb_refresh;
5979
    ds->gui_timer_interval = 500;
5980
    ds->idle = 1;
5981
}
5982

    
5983
/***********************************************************/
5984
/* I/O handling */
5985

    
5986
#define MAX_IO_HANDLERS 64
5987

    
5988
typedef struct IOHandlerRecord {
5989
    int fd;
5990
    IOCanRWHandler *fd_read_poll;
5991
    IOHandler *fd_read;
5992
    IOHandler *fd_write;
5993
    int deleted;
5994
    void *opaque;
5995
    /* temporary data */
5996
    struct pollfd *ufd;
5997
    struct IOHandlerRecord *next;
5998
} IOHandlerRecord;
5999

    
6000
static IOHandlerRecord *first_io_handler;
6001

    
6002
/* XXX: fd_read_poll should be suppressed, but an API change is
6003
   necessary in the character devices to suppress fd_can_read(). */
6004
int qemu_set_fd_handler2(int fd,
6005
                         IOCanRWHandler *fd_read_poll,
6006
                         IOHandler *fd_read,
6007
                         IOHandler *fd_write,
6008
                         void *opaque)
6009
{
6010
    IOHandlerRecord **pioh, *ioh;
6011

    
6012
    if (!fd_read && !fd_write) {
6013
        pioh = &first_io_handler;
6014
        for(;;) {
6015
            ioh = *pioh;
6016
            if (ioh == NULL)
6017
                break;
6018
            if (ioh->fd == fd) {
6019
                ioh->deleted = 1;
6020
                break;
6021
            }
6022
            pioh = &ioh->next;
6023
        }
6024
    } else {
6025
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
6026
            if (ioh->fd == fd)
6027
                goto found;
6028
        }
6029
        ioh = qemu_mallocz(sizeof(IOHandlerRecord));
6030
        if (!ioh)
6031
            return -1;
6032
        ioh->next = first_io_handler;
6033
        first_io_handler = ioh;
6034
    found:
6035
        ioh->fd = fd;
6036
        ioh->fd_read_poll = fd_read_poll;
6037
        ioh->fd_read = fd_read;
6038
        ioh->fd_write = fd_write;
6039
        ioh->opaque = opaque;
6040
        ioh->deleted = 0;
6041
    }
6042
    return 0;
6043
}
6044

    
6045
int qemu_set_fd_handler(int fd,
6046
                        IOHandler *fd_read,
6047
                        IOHandler *fd_write,
6048
                        void *opaque)
6049
{
6050
    return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
6051
}
6052

    
6053
/***********************************************************/
6054
/* Polling handling */
6055

    
6056
typedef struct PollingEntry {
6057
    PollingFunc *func;
6058
    void *opaque;
6059
    struct PollingEntry *next;
6060
} PollingEntry;
6061

    
6062
static PollingEntry *first_polling_entry;
6063

    
6064
int qemu_add_polling_cb(PollingFunc *func, void *opaque)
6065
{
6066
    PollingEntry **ppe, *pe;
6067
    pe = qemu_mallocz(sizeof(PollingEntry));
6068
    if (!pe)
6069
        return -1;
6070
    pe->func = func;
6071
    pe->opaque = opaque;
6072
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next);
6073
    *ppe = pe;
6074
    return 0;
6075
}
6076

    
6077
void qemu_del_polling_cb(PollingFunc *func, void *opaque)
6078
{
6079
    PollingEntry **ppe, *pe;
6080
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next) {
6081
        pe = *ppe;
6082
        if (pe->func == func && pe->opaque == opaque) {
6083
            *ppe = pe->next;
6084
            qemu_free(pe);
6085
            break;
6086
        }
6087
    }
6088
}
6089

    
6090
#ifdef _WIN32
6091
/***********************************************************/
6092
/* Wait objects support */
6093
typedef struct WaitObjects {
6094
    int num;
6095
    HANDLE events[MAXIMUM_WAIT_OBJECTS + 1];
6096
    WaitObjectFunc *func[MAXIMUM_WAIT_OBJECTS + 1];
6097
    void *opaque[MAXIMUM_WAIT_OBJECTS + 1];
6098
} WaitObjects;
6099

    
6100
static WaitObjects wait_objects = {0};
6101

    
6102
int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
6103
{
6104
    WaitObjects *w = &wait_objects;
6105

    
6106
    if (w->num >= MAXIMUM_WAIT_OBJECTS)
6107
        return -1;
6108
    w->events[w->num] = handle;
6109
    w->func[w->num] = func;
6110
    w->opaque[w->num] = opaque;
6111
    w->num++;
6112
    return 0;
6113
}
6114

    
6115
void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
6116
{
6117
    int i, found;
6118
    WaitObjects *w = &wait_objects;
6119

    
6120
    found = 0;
6121
    for (i = 0; i < w->num; i++) {
6122
        if (w->events[i] == handle)
6123
            found = 1;
6124
        if (found) {
6125
            w->events[i] = w->events[i + 1];
6126
            w->func[i] = w->func[i + 1];
6127
            w->opaque[i] = w->opaque[i + 1];
6128
        }
6129
    }
6130
    if (found)
6131
        w->num--;
6132
}
6133
#endif
6134

    
6135
/***********************************************************/
6136
/* savevm/loadvm support */
6137

    
6138
#define IO_BUF_SIZE 32768
6139

    
6140
struct QEMUFile {
6141
    FILE *outfile;
6142
    BlockDriverState *bs;
6143
    int is_file;
6144
    int is_writable;
6145
    int64_t base_offset;
6146
    int64_t buf_offset; /* start of buffer when writing, end of buffer
6147
                           when reading */
6148
    int buf_index;
6149
    int buf_size; /* 0 when writing */
6150
    uint8_t buf[IO_BUF_SIZE];
6151
};
6152

    
6153
QEMUFile *qemu_fopen(const char *filename, const char *mode)
6154
{
6155
    QEMUFile *f;
6156

    
6157
    f = qemu_mallocz(sizeof(QEMUFile));
6158
    if (!f)
6159
        return NULL;
6160
    if (!strcmp(mode, "wb")) {
6161
        f->is_writable = 1;
6162
    } else if (!strcmp(mode, "rb")) {
6163
        f->is_writable = 0;
6164
    } else {
6165
        goto fail;
6166
    }
6167
    f->outfile = fopen(filename, mode);
6168
    if (!f->outfile)
6169
        goto fail;
6170
    f->is_file = 1;
6171
    return f;
6172
 fail:
6173
    if (f->outfile)
6174
        fclose(f->outfile);
6175
    qemu_free(f);
6176
    return NULL;
6177
}
6178

    
6179
static QEMUFile *qemu_fopen_bdrv(BlockDriverState *bs, int64_t offset, int is_writable)
6180
{
6181
    QEMUFile *f;
6182

    
6183
    f = qemu_mallocz(sizeof(QEMUFile));
6184
    if (!f)
6185
        return NULL;
6186
    f->is_file = 0;
6187
    f->bs = bs;
6188
    f->is_writable = is_writable;
6189
    f->base_offset = offset;
6190
    return f;
6191
}
6192

    
6193
void qemu_fflush(QEMUFile *f)
6194
{
6195
    if (!f->is_writable)
6196
        return;
6197
    if (f->buf_index > 0) {
6198
        if (f->is_file) {
6199
            fseek(f->outfile, f->buf_offset, SEEK_SET);
6200
            fwrite(f->buf, 1, f->buf_index, f->outfile);
6201
        } else {
6202
            bdrv_pwrite(f->bs, f->base_offset + f->buf_offset,
6203
                        f->buf, f->buf_index);
6204
        }
6205
        f->buf_offset += f->buf_index;
6206
        f->buf_index = 0;
6207
    }
6208
}
6209

    
6210
static void qemu_fill_buffer(QEMUFile *f)
6211
{
6212
    int len;
6213

    
6214
    if (f->is_writable)
6215
        return;
6216
    if (f->is_file) {
6217
        fseek(f->outfile, f->buf_offset, SEEK_SET);
6218
        len = fread(f->buf, 1, IO_BUF_SIZE, f->outfile);
6219
        if (len < 0)
6220
            len = 0;
6221
    } else {
6222
        len = bdrv_pread(f->bs, f->base_offset + f->buf_offset,
6223
                         f->buf, IO_BUF_SIZE);
6224
        if (len < 0)
6225
            len = 0;
6226
    }
6227
    f->buf_index = 0;
6228
    f->buf_size = len;
6229
    f->buf_offset += len;
6230
}
6231

    
6232
void qemu_fclose(QEMUFile *f)
6233
{
6234
    if (f->is_writable)
6235
        qemu_fflush(f);
6236
    if (f->is_file) {
6237
        fclose(f->outfile);
6238
    }
6239
    qemu_free(f);
6240
}
6241

    
6242
void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size)
6243
{
6244
    int l;
6245
    while (size > 0) {
6246
        l = IO_BUF_SIZE - f->buf_index;
6247
        if (l > size)
6248
            l = size;
6249
        memcpy(f->buf + f->buf_index, buf, l);
6250
        f->buf_index += l;
6251
        buf += l;
6252
        size -= l;
6253
        if (f->buf_index >= IO_BUF_SIZE)
6254
            qemu_fflush(f);
6255
    }
6256
}
6257

    
6258
void qemu_put_byte(QEMUFile *f, int v)
6259
{
6260
    f->buf[f->buf_index++] = v;
6261
    if (f->buf_index >= IO_BUF_SIZE)
6262
        qemu_fflush(f);
6263
}
6264

    
6265
int qemu_get_buffer(QEMUFile *f, uint8_t *buf, int size1)
6266
{
6267
    int size, l;
6268

    
6269
    size = size1;
6270
    while (size > 0) {
6271
        l = f->buf_size - f->buf_index;
6272
        if (l == 0) {
6273
            qemu_fill_buffer(f);
6274
            l = f->buf_size - f->buf_index;
6275
            if (l == 0)
6276
                break;
6277
        }
6278
        if (l > size)
6279
            l = size;
6280
        memcpy(buf, f->buf + f->buf_index, l);
6281
        f->buf_index += l;
6282
        buf += l;
6283
        size -= l;
6284
    }
6285
    return size1 - size;
6286
}
6287

    
6288
int qemu_get_byte(QEMUFile *f)
6289
{
6290
    if (f->buf_index >= f->buf_size) {
6291
        qemu_fill_buffer(f);
6292
        if (f->buf_index >= f->buf_size)
6293
            return 0;
6294
    }
6295
    return f->buf[f->buf_index++];
6296
}
6297

    
6298
int64_t qemu_ftell(QEMUFile *f)
6299
{
6300
    return f->buf_offset - f->buf_size + f->buf_index;
6301
}
6302

    
6303
int64_t qemu_fseek(QEMUFile *f, int64_t pos, int whence)
6304
{
6305
    if (whence == SEEK_SET) {
6306
        /* nothing to do */
6307
    } else if (whence == SEEK_CUR) {
6308
        pos += qemu_ftell(f);
6309
    } else {
6310
        /* SEEK_END not supported */
6311
        return -1;
6312
    }
6313
    if (f->is_writable) {
6314
        qemu_fflush(f);
6315
        f->buf_offset = pos;
6316
    } else {
6317
        f->buf_offset = pos;
6318
        f->buf_index = 0;
6319
        f->buf_size = 0;
6320
    }
6321
    return pos;
6322
}
6323

    
6324
void qemu_put_be16(QEMUFile *f, unsigned int v)
6325
{
6326
    qemu_put_byte(f, v >> 8);
6327
    qemu_put_byte(f, v);
6328
}
6329

    
6330
void qemu_put_be32(QEMUFile *f, unsigned int v)
6331
{
6332
    qemu_put_byte(f, v >> 24);
6333
    qemu_put_byte(f, v >> 16);
6334
    qemu_put_byte(f, v >> 8);
6335
    qemu_put_byte(f, v);
6336
}
6337

    
6338
void qemu_put_be64(QEMUFile *f, uint64_t v)
6339
{
6340
    qemu_put_be32(f, v >> 32);
6341
    qemu_put_be32(f, v);
6342
}
6343

    
6344
unsigned int qemu_get_be16(QEMUFile *f)
6345
{
6346
    unsigned int v;
6347
    v = qemu_get_byte(f) << 8;
6348
    v |= qemu_get_byte(f);
6349
    return v;
6350
}
6351

    
6352
unsigned int qemu_get_be32(QEMUFile *f)
6353
{
6354
    unsigned int v;
6355
    v = qemu_get_byte(f) << 24;
6356
    v |= qemu_get_byte(f) << 16;
6357
    v |= qemu_get_byte(f) << 8;
6358
    v |= qemu_get_byte(f);
6359
    return v;
6360
}
6361

    
6362
uint64_t qemu_get_be64(QEMUFile *f)
6363
{
6364
    uint64_t v;
6365
    v = (uint64_t)qemu_get_be32(f) << 32;
6366
    v |= qemu_get_be32(f);
6367
    return v;
6368
}
6369

    
6370
typedef struct SaveStateEntry {
6371
    char idstr[256];
6372
    int instance_id;
6373
    int version_id;
6374
    SaveStateHandler *save_state;
6375
    LoadStateHandler *load_state;
6376
    void *opaque;
6377
    struct SaveStateEntry *next;
6378
} SaveStateEntry;
6379

    
6380
static SaveStateEntry *first_se;
6381

    
6382
/* TODO: Individual devices generally have very little idea about the rest
6383
   of the system, so instance_id should be removed/replaced.
6384
   Meanwhile pass -1 as instance_id if you do not already have a clearly
6385
   distinguishing id for all instances of your device class. */
6386
int register_savevm(const char *idstr,
6387
                    int instance_id,
6388
                    int version_id,
6389
                    SaveStateHandler *save_state,
6390
                    LoadStateHandler *load_state,
6391
                    void *opaque)
6392
{
6393
    SaveStateEntry *se, **pse;
6394

    
6395
    se = qemu_malloc(sizeof(SaveStateEntry));
6396
    if (!se)
6397
        return -1;
6398
    pstrcpy(se->idstr, sizeof(se->idstr), idstr);
6399
    se->instance_id = (instance_id == -1) ? 0 : instance_id;
6400
    se->version_id = version_id;
6401
    se->save_state = save_state;
6402
    se->load_state = load_state;
6403
    se->opaque = opaque;
6404
    se->next = NULL;
6405

    
6406
    /* add at the end of list */
6407
    pse = &first_se;
6408
    while (*pse != NULL) {
6409
        if (instance_id == -1
6410
                && strcmp(se->idstr, (*pse)->idstr) == 0
6411
                && se->instance_id <= (*pse)->instance_id)
6412
            se->instance_id = (*pse)->instance_id + 1;
6413
        pse = &(*pse)->next;
6414
    }
6415
    *pse = se;
6416
    return 0;
6417
}
6418

    
6419
#define QEMU_VM_FILE_MAGIC   0x5145564d
6420
#define QEMU_VM_FILE_VERSION 0x00000002
6421

    
6422
static int qemu_savevm_state(QEMUFile *f)
6423
{
6424
    SaveStateEntry *se;
6425
    int len, ret;
6426
    int64_t cur_pos, len_pos, total_len_pos;
6427

    
6428
    qemu_put_be32(f, QEMU_VM_FILE_MAGIC);
6429
    qemu_put_be32(f, QEMU_VM_FILE_VERSION);
6430
    total_len_pos = qemu_ftell(f);
6431
    qemu_put_be64(f, 0); /* total size */
6432

    
6433
    for(se = first_se; se != NULL; se = se->next) {
6434
        if (se->save_state == NULL)
6435
            /* this one has a loader only, for backwards compatibility */
6436
            continue;
6437

    
6438
        /* ID string */
6439
        len = strlen(se->idstr);
6440
        qemu_put_byte(f, len);
6441
        qemu_put_buffer(f, (uint8_t *)se->idstr, len);
6442

    
6443
        qemu_put_be32(f, se->instance_id);
6444
        qemu_put_be32(f, se->version_id);
6445

    
6446
        /* record size: filled later */
6447
        len_pos = qemu_ftell(f);
6448
        qemu_put_be32(f, 0);
6449
        se->save_state(f, se->opaque);
6450

    
6451
        /* fill record size */
6452
        cur_pos = qemu_ftell(f);
6453
        len = cur_pos - len_pos - 4;
6454
        qemu_fseek(f, len_pos, SEEK_SET);
6455
        qemu_put_be32(f, len);
6456
        qemu_fseek(f, cur_pos, SEEK_SET);
6457
    }
6458
    cur_pos = qemu_ftell(f);
6459
    qemu_fseek(f, total_len_pos, SEEK_SET);
6460
    qemu_put_be64(f, cur_pos - total_len_pos - 8);
6461
    qemu_fseek(f, cur_pos, SEEK_SET);
6462

    
6463
    ret = 0;
6464
    return ret;
6465
}
6466

    
6467
static SaveStateEntry *find_se(const char *idstr, int instance_id)
6468
{
6469
    SaveStateEntry *se;
6470

    
6471
    for(se = first_se; se != NULL; se = se->next) {
6472
        if (!strcmp(se->idstr, idstr) &&
6473
            instance_id == se->instance_id)
6474
            return se;
6475
    }
6476
    return NULL;
6477
}
6478

    
6479
static int qemu_loadvm_state(QEMUFile *f)
6480
{
6481
    SaveStateEntry *se;
6482
    int len, ret, instance_id, record_len, version_id;
6483
    int64_t total_len, end_pos, cur_pos;
6484
    unsigned int v;
6485
    char idstr[256];
6486

    
6487
    v = qemu_get_be32(f);
6488
    if (v != QEMU_VM_FILE_MAGIC)
6489
        goto fail;
6490
    v = qemu_get_be32(f);
6491
    if (v != QEMU_VM_FILE_VERSION) {
6492
    fail:
6493
        ret = -1;
6494
        goto the_end;
6495
    }
6496
    total_len = qemu_get_be64(f);
6497
    end_pos = total_len + qemu_ftell(f);
6498
    for(;;) {
6499
        if (qemu_ftell(f) >= end_pos)
6500
            break;
6501
        len = qemu_get_byte(f);
6502
        qemu_get_buffer(f, (uint8_t *)idstr, len);
6503
        idstr[len] = '\0';
6504
        instance_id = qemu_get_be32(f);
6505
        version_id = qemu_get_be32(f);
6506
        record_len = qemu_get_be32(f);
6507
#if 0
6508
        printf("idstr=%s instance=0x%x version=%d len=%d\n",
6509
               idstr, instance_id, version_id, record_len);
6510
#endif
6511
        cur_pos = qemu_ftell(f);
6512
        se = find_se(idstr, instance_id);
6513
        if (!se) {
6514
            fprintf(stderr, "qemu: warning: instance 0x%x of device '%s' not present in current VM\n",
6515
                    instance_id, idstr);
6516
        } else {
6517
            ret = se->load_state(f, se->opaque, version_id);
6518
            if (ret < 0) {
6519
                fprintf(stderr, "qemu: warning: error while loading state for instance 0x%x of device '%s'\n",
6520
                        instance_id, idstr);
6521
            }
6522
        }
6523
        /* always seek to exact end of record */
6524
        qemu_fseek(f, cur_pos + record_len, SEEK_SET);
6525
    }
6526
    ret = 0;
6527
 the_end:
6528
    return ret;
6529
}
6530

    
6531
/* device can contain snapshots */
6532
static int bdrv_can_snapshot(BlockDriverState *bs)
6533
{
6534
    return (bs &&
6535
            !bdrv_is_removable(bs) &&
6536
            !bdrv_is_read_only(bs));
6537
}
6538

    
6539
/* device must be snapshots in order to have a reliable snapshot */
6540
static int bdrv_has_snapshot(BlockDriverState *bs)
6541
{
6542
    return (bs &&
6543
            !bdrv_is_removable(bs) &&
6544
            !bdrv_is_read_only(bs));
6545
}
6546

    
6547
static BlockDriverState *get_bs_snapshots(void)
6548
{
6549
    BlockDriverState *bs;
6550
    int i;
6551

    
6552
    if (bs_snapshots)
6553
        return bs_snapshots;
6554
    for(i = 0; i <= nb_drives; i++) {
6555
        bs = drives_table[i].bdrv;
6556
        if (bdrv_can_snapshot(bs))
6557
            goto ok;
6558
    }
6559
    return NULL;
6560
 ok:
6561
    bs_snapshots = bs;
6562
    return bs;
6563
}
6564

    
6565
static int bdrv_snapshot_find(BlockDriverState *bs, QEMUSnapshotInfo *sn_info,
6566
                              const char *name)
6567
{
6568
    QEMUSnapshotInfo *sn_tab, *sn;
6569
    int nb_sns, i, ret;
6570

    
6571
    ret = -ENOENT;
6572
    nb_sns = bdrv_snapshot_list(bs, &sn_tab);
6573
    if (nb_sns < 0)
6574
        return ret;
6575
    for(i = 0; i < nb_sns; i++) {
6576
        sn = &sn_tab[i];
6577
        if (!strcmp(sn->id_str, name) || !strcmp(sn->name, name)) {
6578
            *sn_info = *sn;
6579
            ret = 0;
6580
            break;
6581
        }
6582
    }
6583
    qemu_free(sn_tab);
6584
    return ret;
6585
}
6586

    
6587
void do_savevm(const char *name)
6588
{
6589
    BlockDriverState *bs, *bs1;
6590
    QEMUSnapshotInfo sn1, *sn = &sn1, old_sn1, *old_sn = &old_sn1;
6591
    int must_delete, ret, i;
6592
    BlockDriverInfo bdi1, *bdi = &bdi1;
6593
    QEMUFile *f;
6594
    int saved_vm_running;
6595
#ifdef _WIN32
6596
    struct _timeb tb;
6597
#else
6598
    struct timeval tv;
6599
#endif
6600

    
6601
    bs = get_bs_snapshots();
6602
    if (!bs) {
6603
        term_printf("No block device can accept snapshots\n");
6604
        return;
6605
    }
6606

    
6607
    /* ??? Should this occur after vm_stop?  */
6608
    qemu_aio_flush();
6609

    
6610
    saved_vm_running = vm_running;
6611
    vm_stop(0);
6612

    
6613
    must_delete = 0;
6614
    if (name) {
6615
        ret = bdrv_snapshot_find(bs, old_sn, name);
6616
        if (ret >= 0) {
6617
            must_delete = 1;
6618
        }
6619
    }
6620
    memset(sn, 0, sizeof(*sn));
6621
    if (must_delete) {
6622
        pstrcpy(sn->name, sizeof(sn->name), old_sn->name);
6623
        pstrcpy(sn->id_str, sizeof(sn->id_str), old_sn->id_str);
6624
    } else {
6625
        if (name)
6626
            pstrcpy(sn->name, sizeof(sn->name), name);
6627
    }
6628

    
6629
    /* fill auxiliary fields */
6630
#ifdef _WIN32
6631
    _ftime(&tb);
6632
    sn->date_sec = tb.time;
6633
    sn->date_nsec = tb.millitm * 1000000;
6634
#else
6635
    gettimeofday(&tv, NULL);
6636
    sn->date_sec = tv.tv_sec;
6637
    sn->date_nsec = tv.tv_usec * 1000;
6638
#endif
6639
    sn->vm_clock_nsec = qemu_get_clock(vm_clock);
6640

    
6641
    if (bdrv_get_info(bs, bdi) < 0 || bdi->vm_state_offset <= 0) {
6642
        term_printf("Device %s does not support VM state snapshots\n",
6643
                    bdrv_get_device_name(bs));
6644
        goto the_end;
6645
    }
6646

    
6647
    /* save the VM state */
6648
    f = qemu_fopen_bdrv(bs, bdi->vm_state_offset, 1);
6649
    if (!f) {
6650
        term_printf("Could not open VM state file\n");
6651
        goto the_end;
6652
    }
6653
    ret = qemu_savevm_state(f);
6654
    sn->vm_state_size = qemu_ftell(f);
6655
    qemu_fclose(f);
6656
    if (ret < 0) {
6657
        term_printf("Error %d while writing VM\n", ret);
6658
        goto the_end;
6659
    }
6660

    
6661
    /* create the snapshots */
6662

    
6663
    for(i = 0; i < nb_drives; i++) {
6664
        bs1 = drives_table[i].bdrv;
6665
        if (bdrv_has_snapshot(bs1)) {
6666
            if (must_delete) {
6667
                ret = bdrv_snapshot_delete(bs1, old_sn->id_str);
6668
                if (ret < 0) {
6669
                    term_printf("Error while deleting snapshot on '%s'\n",
6670
                                bdrv_get_device_name(bs1));
6671
                }
6672
            }
6673
            ret = bdrv_snapshot_create(bs1, sn);
6674
            if (ret < 0) {
6675
                term_printf("Error while creating snapshot on '%s'\n",
6676
                            bdrv_get_device_name(bs1));
6677
            }
6678
        }
6679
    }
6680

    
6681
 the_end:
6682
    if (saved_vm_running)
6683
        vm_start();
6684
}
6685

    
6686
void do_loadvm(const char *name)
6687
{
6688
    BlockDriverState *bs, *bs1;
6689
    BlockDriverInfo bdi1, *bdi = &bdi1;
6690
    QEMUFile *f;
6691
    int i, ret;
6692
    int saved_vm_running;
6693

    
6694
    bs = get_bs_snapshots();
6695
    if (!bs) {
6696
        term_printf("No block device supports snapshots\n");
6697
        return;
6698
    }
6699

    
6700
    /* Flush all IO requests so they don't interfere with the new state.  */
6701
    qemu_aio_flush();
6702

    
6703
    saved_vm_running = vm_running;
6704
    vm_stop(0);
6705

    
6706
    for(i = 0; i <= nb_drives; i++) {
6707
        bs1 = drives_table[i].bdrv;
6708
        if (bdrv_has_snapshot(bs1)) {
6709
            ret = bdrv_snapshot_goto(bs1, name);
6710
            if (ret < 0) {
6711
                if (bs != bs1)
6712
                    term_printf("Warning: ");
6713
                switch(ret) {
6714
                case -ENOTSUP:
6715
                    term_printf("Snapshots not supported on device '%s'\n",
6716
                                bdrv_get_device_name(bs1));
6717
                    break;
6718
                case -ENOENT:
6719
                    term_printf("Could not find snapshot '%s' on device '%s'\n",
6720
                                name, bdrv_get_device_name(bs1));
6721
                    break;
6722
                default:
6723
                    term_printf("Error %d while activating snapshot on '%s'\n",
6724
                                ret, bdrv_get_device_name(bs1));
6725
                    break;
6726
                }
6727
                /* fatal on snapshot block device */
6728
                if (bs == bs1)
6729
                    goto the_end;
6730
            }
6731
        }
6732
    }
6733

    
6734
    if (bdrv_get_info(bs, bdi) < 0 || bdi->vm_state_offset <= 0) {
6735
        term_printf("Device %s does not support VM state snapshots\n",
6736
                    bdrv_get_device_name(bs));
6737
        return;
6738
    }
6739

    
6740
    /* restore the VM state */
6741
    f = qemu_fopen_bdrv(bs, bdi->vm_state_offset, 0);
6742
    if (!f) {
6743
        term_printf("Could not open VM state file\n");
6744
        goto the_end;
6745
    }
6746
    ret = qemu_loadvm_state(f);
6747
    qemu_fclose(f);
6748
    if (ret < 0) {
6749
        term_printf("Error %d while loading VM state\n", ret);
6750
    }
6751
 the_end:
6752
    if (saved_vm_running)
6753
        vm_start();
6754
}
6755

    
6756
void do_delvm(const char *name)
6757
{
6758
    BlockDriverState *bs, *bs1;
6759
    int i, ret;
6760

    
6761
    bs = get_bs_snapshots();
6762
    if (!bs) {
6763
        term_printf("No block device supports snapshots\n");
6764
        return;
6765
    }
6766

    
6767
    for(i = 0; i <= nb_drives; i++) {
6768
        bs1 = drives_table[i].bdrv;
6769
        if (bdrv_has_snapshot(bs1)) {
6770
            ret = bdrv_snapshot_delete(bs1, name);
6771
            if (ret < 0) {
6772
                if (ret == -ENOTSUP)
6773
                    term_printf("Snapshots not supported on device '%s'\n",
6774
                                bdrv_get_device_name(bs1));
6775
                else
6776
                    term_printf("Error %d while deleting snapshot on '%s'\n",
6777
                                ret, bdrv_get_device_name(bs1));
6778
            }
6779
        }
6780
    }
6781
}
6782

    
6783
void do_info_snapshots(void)
6784
{
6785
    BlockDriverState *bs, *bs1;
6786
    QEMUSnapshotInfo *sn_tab, *sn;
6787
    int nb_sns, i;
6788
    char buf[256];
6789

    
6790
    bs = get_bs_snapshots();
6791
    if (!bs) {
6792
        term_printf("No available block device supports snapshots\n");
6793
        return;
6794
    }
6795
    term_printf("Snapshot devices:");
6796
    for(i = 0; i <= nb_drives; i++) {
6797
        bs1 = drives_table[i].bdrv;
6798
        if (bdrv_has_snapshot(bs1)) {
6799
            if (bs == bs1)
6800
                term_printf(" %s", bdrv_get_device_name(bs1));
6801
        }
6802
    }
6803
    term_printf("\n");
6804

    
6805
    nb_sns = bdrv_snapshot_list(bs, &sn_tab);
6806
    if (nb_sns < 0) {
6807
        term_printf("bdrv_snapshot_list: error %d\n", nb_sns);
6808
        return;
6809
    }
6810
    term_printf("Snapshot list (from %s):\n", bdrv_get_device_name(bs));
6811
    term_printf("%s\n", bdrv_snapshot_dump(buf, sizeof(buf), NULL));
6812
    for(i = 0; i < nb_sns; i++) {
6813
        sn = &sn_tab[i];
6814
        term_printf("%s\n", bdrv_snapshot_dump(buf, sizeof(buf), sn));
6815
    }
6816
    qemu_free(sn_tab);
6817
}
6818

    
6819
/***********************************************************/
6820
/* ram save/restore */
6821

    
6822
static int ram_get_page(QEMUFile *f, uint8_t *buf, int len)
6823
{
6824
    int v;
6825

    
6826
    v = qemu_get_byte(f);
6827
    switch(v) {
6828
    case 0:
6829
        if (qemu_get_buffer(f, buf, len) != len)
6830
            return -EIO;
6831
        break;
6832
    case 1:
6833
        v = qemu_get_byte(f);
6834
        memset(buf, v, len);
6835
        break;
6836
    default:
6837
        return -EINVAL;
6838
    }
6839
    return 0;
6840
}
6841

    
6842
static int ram_load_v1(QEMUFile *f, void *opaque)
6843
{
6844
    int ret;
6845
    ram_addr_t i;
6846

    
6847
    if (qemu_get_be32(f) != phys_ram_size)
6848
        return -EINVAL;
6849
    for(i = 0; i < phys_ram_size; i+= TARGET_PAGE_SIZE) {
6850
        ret = ram_get_page(f, phys_ram_base + i, TARGET_PAGE_SIZE);
6851
        if (ret)
6852
            return ret;
6853
    }
6854
    return 0;
6855
}
6856

    
6857
#define BDRV_HASH_BLOCK_SIZE 1024
6858
#define IOBUF_SIZE 4096
6859
#define RAM_CBLOCK_MAGIC 0xfabe
6860

    
6861
typedef struct RamCompressState {
6862
    z_stream zstream;
6863
    QEMUFile *f;
6864
    uint8_t buf[IOBUF_SIZE];
6865
} RamCompressState;
6866

    
6867
static int ram_compress_open(RamCompressState *s, QEMUFile *f)
6868
{
6869
    int ret;
6870
    memset(s, 0, sizeof(*s));
6871
    s->f = f;
6872
    ret = deflateInit2(&s->zstream, 1,
6873
                       Z_DEFLATED, 15,
6874
                       9, Z_DEFAULT_STRATEGY);
6875
    if (ret != Z_OK)
6876
        return -1;
6877
    s->zstream.avail_out = IOBUF_SIZE;
6878
    s->zstream.next_out = s->buf;
6879
    return 0;
6880
}
6881

    
6882
static void ram_put_cblock(RamCompressState *s, const uint8_t *buf, int len)
6883
{
6884
    qemu_put_be16(s->f, RAM_CBLOCK_MAGIC);
6885
    qemu_put_be16(s->f, len);
6886
    qemu_put_buffer(s->f, buf, len);
6887
}
6888

    
6889
static int ram_compress_buf(RamCompressState *s, const uint8_t *buf, int len)
6890
{
6891
    int ret;
6892

    
6893
    s->zstream.avail_in = len;
6894
    s->zstream.next_in = (uint8_t *)buf;
6895
    while (s->zstream.avail_in > 0) {
6896
        ret = deflate(&s->zstream, Z_NO_FLUSH);
6897
        if (ret != Z_OK)
6898
            return -1;
6899
        if (s->zstream.avail_out == 0) {
6900
            ram_put_cblock(s, s->buf, IOBUF_SIZE);
6901
            s->zstream.avail_out = IOBUF_SIZE;
6902
            s->zstream.next_out = s->buf;
6903
        }
6904
    }
6905
    return 0;
6906
}
6907

    
6908
static void ram_compress_close(RamCompressState *s)
6909
{
6910
    int len, ret;
6911

    
6912
    /* compress last bytes */
6913
    for(;;) {
6914
        ret = deflate(&s->zstream, Z_FINISH);
6915
        if (ret == Z_OK || ret == Z_STREAM_END) {
6916
            len = IOBUF_SIZE - s->zstream.avail_out;
6917
            if (len > 0) {
6918
                ram_put_cblock(s, s->buf, len);
6919
            }
6920
            s->zstream.avail_out = IOBUF_SIZE;
6921
            s->zstream.next_out = s->buf;
6922
            if (ret == Z_STREAM_END)
6923
                break;
6924
        } else {
6925
            goto fail;
6926
        }
6927
    }
6928
fail:
6929
    deflateEnd(&s->zstream);
6930
}
6931

    
6932
typedef struct RamDecompressState {
6933
    z_stream zstream;
6934
    QEMUFile *f;
6935
    uint8_t buf[IOBUF_SIZE];
6936
} RamDecompressState;
6937

    
6938
static int ram_decompress_open(RamDecompressState *s, QEMUFile *f)
6939
{
6940
    int ret;
6941
    memset(s, 0, sizeof(*s));
6942
    s->f = f;
6943
    ret = inflateInit(&s->zstream);
6944
    if (ret != Z_OK)
6945
        return -1;
6946
    return 0;
6947
}
6948

    
6949
static int ram_decompress_buf(RamDecompressState *s, uint8_t *buf, int len)
6950
{
6951
    int ret, clen;
6952

    
6953
    s->zstream.avail_out = len;
6954
    s->zstream.next_out = buf;
6955
    while (s->zstream.avail_out > 0) {
6956
        if (s->zstream.avail_in == 0) {
6957
            if (qemu_get_be16(s->f) != RAM_CBLOCK_MAGIC)
6958
                return -1;
6959
            clen = qemu_get_be16(s->f);
6960
            if (clen > IOBUF_SIZE)
6961
                return -1;
6962
            qemu_get_buffer(s->f, s->buf, clen);
6963
            s->zstream.avail_in = clen;
6964
            s->zstream.next_in = s->buf;
6965
        }
6966
        ret = inflate(&s->zstream, Z_PARTIAL_FLUSH);
6967
        if (ret != Z_OK && ret != Z_STREAM_END) {
6968
            return -1;
6969
        }
6970
    }
6971
    return 0;
6972
}
6973

    
6974
static void ram_decompress_close(RamDecompressState *s)
6975
{
6976
    inflateEnd(&s->zstream);
6977
}
6978

    
6979
static void ram_save(QEMUFile *f, void *opaque)
6980
{
6981
    ram_addr_t i;
6982
    RamCompressState s1, *s = &s1;
6983
    uint8_t buf[10];
6984

    
6985
    qemu_put_be32(f, phys_ram_size);
6986
    if (ram_compress_open(s, f) < 0)
6987
        return;
6988
    for(i = 0; i < phys_ram_size; i+= BDRV_HASH_BLOCK_SIZE) {
6989
#if 0
6990
        if (tight_savevm_enabled) {
6991
            int64_t sector_num;
6992
            int j;
6993

6994
            /* find if the memory block is available on a virtual
6995
               block device */
6996
            sector_num = -1;
6997
            for(j = 0; j < nb_drives; j++) {
6998
                sector_num = bdrv_hash_find(drives_table[j].bdrv,
6999
                                            phys_ram_base + i,
7000
                                            BDRV_HASH_BLOCK_SIZE);
7001
                if (sector_num >= 0)
7002
                    break;
7003
            }
7004
            if (j == nb_drives)
7005
                goto normal_compress;
7006
            buf[0] = 1;
7007
            buf[1] = j;
7008
            cpu_to_be64wu((uint64_t *)(buf + 2), sector_num);
7009
            ram_compress_buf(s, buf, 10);
7010
        } else
7011
#endif
7012
        {
7013
            //        normal_compress:
7014
            buf[0] = 0;
7015
            ram_compress_buf(s, buf, 1);
7016
            ram_compress_buf(s, phys_ram_base + i, BDRV_HASH_BLOCK_SIZE);
7017
        }
7018
    }
7019
    ram_compress_close(s);
7020
}
7021

    
7022
static int ram_load(QEMUFile *f, void *opaque, int version_id)
7023
{
7024
    RamDecompressState s1, *s = &s1;
7025
    uint8_t buf[10];
7026
    ram_addr_t i;
7027

    
7028
    if (version_id == 1)
7029
        return ram_load_v1(f, opaque);
7030
    if (version_id != 2)
7031
        return -EINVAL;
7032
    if (qemu_get_be32(f) != phys_ram_size)
7033
        return -EINVAL;
7034
    if (ram_decompress_open(s, f) < 0)
7035
        return -EINVAL;
7036
    for(i = 0; i < phys_ram_size; i+= BDRV_HASH_BLOCK_SIZE) {
7037
        if (ram_decompress_buf(s, buf, 1) < 0) {
7038
            fprintf(stderr, "Error while reading ram block header\n");
7039
            goto error;
7040
        }
7041
        if (buf[0] == 0) {
7042
            if (ram_decompress_buf(s, phys_ram_base + i, BDRV_HASH_BLOCK_SIZE) < 0) {
7043
                fprintf(stderr, "Error while reading ram block address=0x%08" PRIx64, (uint64_t)i);
7044
                goto error;
7045
            }
7046
        } else
7047
#if 0
7048
        if (buf[0] == 1) {
7049
            int bs_index;
7050
            int64_t sector_num;
7051

7052
            ram_decompress_buf(s, buf + 1, 9);
7053
            bs_index = buf[1];
7054
            sector_num = be64_to_cpupu((const uint64_t *)(buf + 2));
7055
            if (bs_index >= nb_drives) {
7056
                fprintf(stderr, "Invalid block device index %d\n", bs_index);
7057
                goto error;
7058
            }
7059
            if (bdrv_read(drives_table[bs_index].bdrv, sector_num,
7060
                          phys_ram_base + i,
7061
                          BDRV_HASH_BLOCK_SIZE / 512) < 0) {
7062
                fprintf(stderr, "Error while reading sector %d:%" PRId64 "\n",
7063
                        bs_index, sector_num);
7064
                goto error;
7065
            }
7066
        } else
7067
#endif
7068
        {
7069
        error:
7070
            printf("Error block header\n");
7071
            return -EINVAL;
7072
        }
7073
    }
7074
    ram_decompress_close(s);
7075
    return 0;
7076
}
7077

    
7078
/***********************************************************/
7079
/* bottom halves (can be seen as timers which expire ASAP) */
7080

    
7081
struct QEMUBH {
7082
    QEMUBHFunc *cb;
7083
    void *opaque;
7084
    int scheduled;
7085
    QEMUBH *next;
7086
};
7087

    
7088
static QEMUBH *first_bh = NULL;
7089

    
7090
QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque)
7091
{
7092
    QEMUBH *bh;
7093
    bh = qemu_mallocz(sizeof(QEMUBH));
7094
    if (!bh)
7095
        return NULL;
7096
    bh->cb = cb;
7097
    bh->opaque = opaque;
7098
    return bh;
7099
}
7100

    
7101
int qemu_bh_poll(void)
7102
{
7103
    QEMUBH *bh, **pbh;
7104
    int ret;
7105

    
7106
    ret = 0;
7107
    for(;;) {
7108
        pbh = &first_bh;
7109
        bh = *pbh;
7110
        if (!bh)
7111
            break;
7112
        ret = 1;
7113
        *pbh = bh->next;
7114
        bh->scheduled = 0;
7115
        bh->cb(bh->opaque);
7116
    }
7117
    return ret;
7118
}
7119

    
7120
void qemu_bh_schedule(QEMUBH *bh)
7121
{
7122
    CPUState *env = cpu_single_env;
7123
    if (bh->scheduled)
7124
        return;
7125
    bh->scheduled = 1;
7126
    bh->next = first_bh;
7127
    first_bh = bh;
7128

    
7129
    /* stop the currently executing CPU to execute the BH ASAP */
7130
    if (env) {
7131
        cpu_interrupt(env, CPU_INTERRUPT_EXIT);
7132
    }
7133
}
7134

    
7135
void qemu_bh_cancel(QEMUBH *bh)
7136
{
7137
    QEMUBH **pbh;
7138
    if (bh->scheduled) {
7139
        pbh = &first_bh;
7140
        while (*pbh != bh)
7141
            pbh = &(*pbh)->next;
7142
        *pbh = bh->next;
7143
        bh->scheduled = 0;
7144
    }
7145
}
7146

    
7147
void qemu_bh_delete(QEMUBH *bh)
7148
{
7149
    qemu_bh_cancel(bh);
7150
    qemu_free(bh);
7151
}
7152

    
7153
/***********************************************************/
7154
/* machine registration */
7155

    
7156
QEMUMachine *first_machine = NULL;
7157

    
7158
int qemu_register_machine(QEMUMachine *m)
7159
{
7160
    QEMUMachine **pm;
7161
    pm = &first_machine;
7162
    while (*pm != NULL)
7163
        pm = &(*pm)->next;
7164
    m->next = NULL;
7165
    *pm = m;
7166
    return 0;
7167
}
7168

    
7169
static QEMUMachine *find_machine(const char *name)
7170
{
7171
    QEMUMachine *m;
7172

    
7173
    for(m = first_machine; m != NULL; m = m->next) {
7174
        if (!strcmp(m->name, name))
7175
            return m;
7176
    }
7177
    return NULL;
7178
}
7179

    
7180
/***********************************************************/
7181
/* main execution loop */
7182

    
7183
static void gui_update(void *opaque)
7184
{
7185
    DisplayState *ds = opaque;
7186
    ds->dpy_refresh(ds);
7187
    qemu_mod_timer(ds->gui_timer,
7188
        (ds->gui_timer_interval ?
7189
            ds->gui_timer_interval :
7190
            GUI_REFRESH_INTERVAL)
7191
        + qemu_get_clock(rt_clock));
7192
}
7193

    
7194
struct vm_change_state_entry {
7195
    VMChangeStateHandler *cb;
7196
    void *opaque;
7197
    LIST_ENTRY (vm_change_state_entry) entries;
7198
};
7199

    
7200
static LIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
7201

    
7202
VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
7203
                                                     void *opaque)
7204
{
7205
    VMChangeStateEntry *e;
7206

    
7207
    e = qemu_mallocz(sizeof (*e));
7208
    if (!e)
7209
        return NULL;
7210

    
7211
    e->cb = cb;
7212
    e->opaque = opaque;
7213
    LIST_INSERT_HEAD(&vm_change_state_head, e, entries);
7214
    return e;
7215
}
7216

    
7217
void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
7218
{
7219
    LIST_REMOVE (e, entries);
7220
    qemu_free (e);
7221
}
7222

    
7223
static void vm_state_notify(int running)
7224
{
7225
    VMChangeStateEntry *e;
7226

    
7227
    for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) {
7228
        e->cb(e->opaque, running);
7229
    }
7230
}
7231

    
7232
/* XXX: support several handlers */
7233
static VMStopHandler *vm_stop_cb;
7234
static void *vm_stop_opaque;
7235

    
7236
int qemu_add_vm_stop_handler(VMStopHandler *cb, void *opaque)
7237
{
7238
    vm_stop_cb = cb;
7239
    vm_stop_opaque = opaque;
7240
    return 0;
7241
}
7242

    
7243
void qemu_del_vm_stop_handler(VMStopHandler *cb, void *opaque)
7244
{
7245
    vm_stop_cb = NULL;
7246
}
7247

    
7248
void vm_start(void)
7249
{
7250
    if (!vm_running) {
7251
        cpu_enable_ticks();
7252
        vm_running = 1;
7253
        vm_state_notify(1);
7254
        qemu_rearm_alarm_timer(alarm_timer);
7255
    }
7256
}
7257

    
7258
void vm_stop(int reason)
7259
{
7260
    if (vm_running) {
7261
        cpu_disable_ticks();
7262
        vm_running = 0;
7263
        if (reason != 0) {
7264
            if (vm_stop_cb) {
7265
                vm_stop_cb(vm_stop_opaque, reason);
7266
            }
7267
        }
7268
        vm_state_notify(0);
7269
    }
7270
}
7271

    
7272
/* reset/shutdown handler */
7273

    
7274
typedef struct QEMUResetEntry {
7275
    QEMUResetHandler *func;
7276
    void *opaque;
7277
    struct QEMUResetEntry *next;
7278
} QEMUResetEntry;
7279

    
7280
static QEMUResetEntry *first_reset_entry;
7281
static int reset_requested;
7282
static int shutdown_requested;
7283
static int powerdown_requested;
7284

    
7285
int qemu_shutdown_requested(void)
7286
{
7287
    int r = shutdown_requested;
7288
    shutdown_requested = 0;
7289
    return r;
7290
}
7291

    
7292
int qemu_reset_requested(void)
7293
{
7294
    int r = reset_requested;
7295
    reset_requested = 0;
7296
    return r;
7297
}
7298

    
7299
int qemu_powerdown_requested(void)
7300
{
7301
    int r = powerdown_requested;
7302
    powerdown_requested = 0;
7303
    return r;
7304
}
7305

    
7306
void qemu_register_reset(QEMUResetHandler *func, void *opaque)
7307
{
7308
    QEMUResetEntry **pre, *re;
7309

    
7310
    pre = &first_reset_entry;
7311
    while (*pre != NULL)
7312
        pre = &(*pre)->next;
7313
    re = qemu_mallocz(sizeof(QEMUResetEntry));
7314
    re->func = func;
7315
    re->opaque = opaque;
7316
    re->next = NULL;
7317
    *pre = re;
7318
}
7319

    
7320
void qemu_system_reset(void)
7321
{
7322
    QEMUResetEntry *re;
7323

    
7324
    /* reset all devices */
7325
    for(re = first_reset_entry; re != NULL; re = re->next) {
7326
        re->func(re->opaque);
7327
    }
7328
}
7329

    
7330
void qemu_system_reset_request(void)
7331
{
7332
    if (no_reboot) {
7333
        shutdown_requested = 1;
7334
    } else {
7335
        reset_requested = 1;
7336
    }
7337
    if (cpu_single_env)
7338
        cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
7339
}
7340

    
7341
void qemu_system_shutdown_request(void)
7342
{
7343
    shutdown_requested = 1;
7344
    if (cpu_single_env)
7345
        cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
7346
}
7347

    
7348
void qemu_system_powerdown_request(void)
7349
{
7350
    powerdown_requested = 1;
7351
    if (cpu_single_env)
7352
        cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
7353
}
7354

    
7355
void main_loop_wait(int timeout)
7356
{
7357
    IOHandlerRecord *ioh;
7358
    fd_set rfds, wfds, xfds;
7359
    int ret, nfds;
7360
#ifdef _WIN32
7361
    int ret2, i;
7362
#endif
7363
    struct timeval tv;
7364
    PollingEntry *pe;
7365

    
7366

    
7367
    /* XXX: need to suppress polling by better using win32 events */
7368
    ret = 0;
7369
    for(pe = first_polling_entry; pe != NULL; pe = pe->next) {
7370
        ret |= pe->func(pe->opaque);
7371
    }
7372
#ifdef _WIN32
7373
    if (ret == 0) {
7374
        int err;
7375
        WaitObjects *w = &wait_objects;
7376

    
7377
        ret = WaitForMultipleObjects(w->num, w->events, FALSE, timeout);
7378
        if (WAIT_OBJECT_0 + 0 <= ret && ret <= WAIT_OBJECT_0 + w->num - 1) {
7379
            if (w->func[ret - WAIT_OBJECT_0])
7380
                w->func[ret - WAIT_OBJECT_0](w->opaque[ret - WAIT_OBJECT_0]);
7381

    
7382
            /* Check for additional signaled events */
7383
            for(i = (ret - WAIT_OBJECT_0 + 1); i < w->num; i++) {
7384

    
7385
                /* Check if event is signaled */
7386
                ret2 = WaitForSingleObject(w->events[i], 0);
7387
                if(ret2 == WAIT_OBJECT_0) {
7388
                    if (w->func[i])
7389
                        w->func[i](w->opaque[i]);
7390
                } else if (ret2 == WAIT_TIMEOUT) {
7391
                } else {
7392
                    err = GetLastError();
7393
                    fprintf(stderr, "WaitForSingleObject error %d %d\n", i, err);
7394
                }
7395
            }
7396
        } else if (ret == WAIT_TIMEOUT) {
7397
        } else {
7398
            err = GetLastError();
7399
            fprintf(stderr, "WaitForMultipleObjects error %d %d\n", ret, err);
7400
        }
7401
    }
7402
#endif
7403
    /* poll any events */
7404
    /* XXX: separate device handlers from system ones */
7405
    nfds = -1;
7406
    FD_ZERO(&rfds);
7407
    FD_ZERO(&wfds);
7408
    FD_ZERO(&xfds);
7409
    for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
7410
        if (ioh->deleted)
7411
            continue;
7412
        if (ioh->fd_read &&
7413
            (!ioh->fd_read_poll ||
7414
             ioh->fd_read_poll(ioh->opaque) != 0)) {
7415
            FD_SET(ioh->fd, &rfds);
7416
            if (ioh->fd > nfds)
7417
                nfds = ioh->fd;
7418
        }
7419
        if (ioh->fd_write) {
7420
            FD_SET(ioh->fd, &wfds);
7421
            if (ioh->fd > nfds)
7422
                nfds = ioh->fd;
7423
        }
7424
    }
7425

    
7426
    tv.tv_sec = 0;
7427
#ifdef _WIN32
7428
    tv.tv_usec = 0;
7429
#else
7430
    tv.tv_usec = timeout * 1000;
7431
#endif
7432
#if defined(CONFIG_SLIRP)
7433
    if (slirp_inited) {
7434
        slirp_select_fill(&nfds, &rfds, &wfds, &xfds);
7435
    }
7436
#endif
7437
    ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv);
7438
    if (ret > 0) {
7439
        IOHandlerRecord **pioh;
7440

    
7441
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
7442
            if (!ioh->deleted && ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
7443
                ioh->fd_read(ioh->opaque);
7444
            }
7445
            if (!ioh->deleted && ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
7446
                ioh->fd_write(ioh->opaque);
7447
            }
7448
        }
7449

    
7450
        /* remove deleted IO handlers */
7451
        pioh = &first_io_handler;
7452
        while (*pioh) {
7453
            ioh = *pioh;
7454
            if (ioh->deleted) {
7455
                *pioh = ioh->next;
7456
                qemu_free(ioh);
7457
            } else
7458
                pioh = &ioh->next;
7459
        }
7460
    }
7461
#if defined(CONFIG_SLIRP)
7462
    if (slirp_inited) {
7463
        if (ret < 0) {
7464
            FD_ZERO(&rfds);
7465
            FD_ZERO(&wfds);
7466
            FD_ZERO(&xfds);
7467
        }
7468
        slirp_select_poll(&rfds, &wfds, &xfds);
7469
    }
7470
#endif
7471
    qemu_aio_poll();
7472

    
7473
    if (vm_running) {
7474
        if (likely(!(cur_cpu->singlestep_enabled & SSTEP_NOTIMER)))
7475
        qemu_run_timers(&active_timers[QEMU_TIMER_VIRTUAL],
7476
                        qemu_get_clock(vm_clock));
7477
        /* run dma transfers, if any */
7478
        DMA_run();
7479
    }
7480

    
7481
    /* real time timers */
7482
    qemu_run_timers(&active_timers[QEMU_TIMER_REALTIME],
7483
                    qemu_get_clock(rt_clock));
7484

    
7485
    if (alarm_timer->flags & ALARM_FLAG_EXPIRED) {
7486
        alarm_timer->flags &= ~(ALARM_FLAG_EXPIRED);
7487
        qemu_rearm_alarm_timer(alarm_timer);
7488
    }
7489

    
7490
    /* Check bottom-halves last in case any of the earlier events triggered
7491
       them.  */
7492
    qemu_bh_poll();
7493

    
7494
}
7495

    
7496
static int main_loop(void)
7497
{
7498
    int ret, timeout;
7499
#ifdef CONFIG_PROFILER
7500
    int64_t ti;
7501
#endif
7502
    CPUState *env;
7503

    
7504
    cur_cpu = first_cpu;
7505
    next_cpu = cur_cpu->next_cpu ?: first_cpu;
7506
    for(;;) {
7507
        if (vm_running) {
7508

    
7509
            for(;;) {
7510
                /* get next cpu */
7511
                env = next_cpu;
7512
#ifdef CONFIG_PROFILER
7513
                ti = profile_getclock();
7514
#endif
7515
                if (use_icount) {
7516
                    int64_t count;
7517
                    int decr;
7518
                    qemu_icount -= (env->icount_decr.u16.low + env->icount_extra);
7519
                    env->icount_decr.u16.low = 0;
7520
                    env->icount_extra = 0;
7521
                    count = qemu_next_deadline();
7522
                    count = (count + (1 << icount_time_shift) - 1)
7523
                            >> icount_time_shift;
7524
                    qemu_icount += count;
7525
                    decr = (count > 0xffff) ? 0xffff : count;
7526
                    count -= decr;
7527
                    env->icount_decr.u16.low = decr;
7528
                    env->icount_extra = count;
7529
                }
7530
                ret = cpu_exec(env);
7531
#ifdef CONFIG_PROFILER
7532
                qemu_time += profile_getclock() - ti;
7533
#endif
7534
                if (use_icount) {
7535
                    /* Fold pending instructions back into the
7536
                       instruction counter, and clear the interrupt flag.  */
7537
                    qemu_icount -= (env->icount_decr.u16.low
7538
                                    + env->icount_extra);
7539
                    env->icount_decr.u32 = 0;
7540
                    env->icount_extra = 0;
7541
                }
7542
                next_cpu = env->next_cpu ?: first_cpu;
7543
                if (event_pending && likely(ret != EXCP_DEBUG)) {
7544
                    ret = EXCP_INTERRUPT;
7545
                    event_pending = 0;
7546
                    break;
7547
                }
7548
                if (ret == EXCP_HLT) {
7549
                    /* Give the next CPU a chance to run.  */
7550
                    cur_cpu = env;
7551
                    continue;
7552
                }
7553
                if (ret != EXCP_HALTED)
7554
                    break;
7555
                /* all CPUs are halted ? */
7556
                if (env == cur_cpu)
7557
                    break;
7558
            }
7559
            cur_cpu = env;
7560

    
7561
            if (shutdown_requested) {
7562
                ret = EXCP_INTERRUPT;
7563
                if (no_shutdown) {
7564
                    vm_stop(0);
7565
                    no_shutdown = 0;
7566
                }
7567
                else
7568
                    break;
7569
            }
7570
            if (reset_requested) {
7571
                reset_requested = 0;
7572
                qemu_system_reset();
7573
                ret = EXCP_INTERRUPT;
7574
            }
7575
            if (powerdown_requested) {
7576
                powerdown_requested = 0;
7577
                qemu_system_powerdown();
7578
                ret = EXCP_INTERRUPT;
7579
            }
7580
            if (unlikely(ret == EXCP_DEBUG)) {
7581
                vm_stop(EXCP_DEBUG);
7582
            }
7583
            /* If all cpus are halted then wait until the next IRQ */
7584
            /* XXX: use timeout computed from timers */
7585
            if (ret == EXCP_HALTED) {
7586
                if (use_icount) {
7587
                    int64_t add;
7588
                    int64_t delta;
7589
                    /* Advance virtual time to the next event.  */
7590
                    if (use_icount == 1) {
7591
                        /* When not using an adaptive execution frequency
7592
                           we tend to get badly out of sync with real time,
7593
                           so just delay for a reasonable amount of time.  */
7594
                        delta = 0;
7595
                    } else {
7596
                        delta = cpu_get_icount() - cpu_get_clock();
7597
                    }
7598
                    if (delta > 0) {
7599
                        /* If virtual time is ahead of real time then just
7600
                           wait for IO.  */
7601
                        timeout = (delta / 1000000) + 1;
7602
                    } else {
7603
                        /* Wait for either IO to occur or the next
7604
                           timer event.  */
7605
                        add = qemu_next_deadline();
7606
                        /* We advance the timer before checking for IO.
7607
                           Limit the amount we advance so that early IO
7608
                           activity won't get the guest too far ahead.  */
7609
                        if (add > 10000000)
7610
                            add = 10000000;
7611
                        delta += add;
7612
                        add = (add + (1 << icount_time_shift) - 1)
7613
                              >> icount_time_shift;
7614
                        qemu_icount += add;
7615
                        timeout = delta / 1000000;
7616
                        if (timeout < 0)
7617
                            timeout = 0;
7618
                    }
7619
                } else {
7620
                    timeout = 10;
7621
                }
7622
            } else {
7623
                timeout = 0;
7624
            }
7625
        } else {
7626
            if (shutdown_requested)
7627
                break;
7628
            timeout = 10;
7629
        }
7630
#ifdef CONFIG_PROFILER
7631
        ti = profile_getclock();
7632
#endif
7633
        main_loop_wait(timeout);
7634
#ifdef CONFIG_PROFILER
7635
        dev_time += profile_getclock() - ti;
7636
#endif
7637
    }
7638
    cpu_disable_ticks();
7639
    return ret;
7640
}
7641

    
7642
static void help(int exitcode)
7643
{
7644
    printf("QEMU PC emulator version " QEMU_VERSION ", Copyright (c) 2003-2008 Fabrice Bellard\n"
7645
           "usage: %s [options] [disk_image]\n"
7646
           "\n"
7647
           "'disk_image' is a raw hard image image for IDE hard disk 0\n"
7648
           "\n"
7649
           "Standard options:\n"
7650
           "-M machine      select emulated machine (-M ? for list)\n"
7651
           "-cpu cpu        select CPU (-cpu ? for list)\n"
7652
           "-fda/-fdb file  use 'file' as floppy disk 0/1 image\n"
7653
           "-hda/-hdb file  use 'file' as IDE hard disk 0/1 image\n"
7654
           "-hdc/-hdd file  use 'file' as IDE hard disk 2/3 image\n"
7655
           "-cdrom file     use 'file' as IDE cdrom image (cdrom is ide1 master)\n"
7656
           "-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]\n"
7657
           "       [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]\n"
7658
           "       [,cache=on|off][,format=f]\n"
7659
           "                use 'file' as a drive image\n"
7660
           "-mtdblock file  use 'file' as on-board Flash memory image\n"
7661
           "-sd file        use 'file' as SecureDigital card image\n"
7662
           "-pflash file    use 'file' as a parallel flash image\n"
7663
           "-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n)\n"
7664
           "-snapshot       write to temporary files instead of disk image files\n"
7665
#ifdef CONFIG_SDL
7666
           "-no-frame       open SDL window without a frame and window decorations\n"
7667
           "-alt-grab       use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt)\n"
7668
           "-no-quit        disable SDL window close capability\n"
7669
#endif
7670
#ifdef TARGET_I386
7671
           "-no-fd-bootchk  disable boot signature checking for floppy disks\n"
7672
#endif
7673
           "-m megs         set virtual RAM size to megs MB [default=%d]\n"
7674
           "-smp n          set the number of CPUs to 'n' [default=1]\n"
7675
           "-nographic      disable graphical output and redirect serial I/Os to console\n"
7676
           "-portrait       rotate graphical output 90 deg left (only PXA LCD)\n"
7677
#ifndef _WIN32
7678
           "-k language     use keyboard layout (for example \"fr\" for French)\n"
7679
#endif
7680
#ifdef HAS_AUDIO
7681
           "-audio-help     print list of audio drivers and their options\n"
7682
           "-soundhw c1,... enable audio support\n"
7683
           "                and only specified sound cards (comma separated list)\n"
7684
           "                use -soundhw ? to get the list of supported cards\n"
7685
           "                use -soundhw all to enable all of them\n"
7686
#endif
7687
           "-localtime      set the real time clock to local time [default=utc]\n"
7688
           "-full-screen    start in full screen\n"
7689
#ifdef TARGET_I386
7690
           "-win2k-hack     use it when installing Windows 2000 to avoid a disk full bug\n"
7691
#endif
7692
           "-usb            enable the USB driver (will be the default soon)\n"
7693
           "-usbdevice name add the host or guest USB device 'name'\n"
7694
#if defined(TARGET_PPC) || defined(TARGET_SPARC)
7695
           "-g WxH[xDEPTH]  Set the initial graphical resolution and depth\n"
7696
#endif
7697
           "-name string    set the name of the guest\n"
7698
           "\n"
7699
           "Network options:\n"
7700
           "-net nic[,vlan=n][,macaddr=addr][,model=type]\n"
7701
           "                create a new Network Interface Card and connect it to VLAN 'n'\n"
7702
#ifdef CONFIG_SLIRP
7703
           "-net user[,vlan=n][,hostname=host]\n"
7704
           "                connect the user mode network stack to VLAN 'n' and send\n"
7705
           "                hostname 'host' to DHCP clients\n"
7706
#endif
7707
#ifdef _WIN32
7708
           "-net tap[,vlan=n],ifname=name\n"
7709
           "                connect the host TAP network interface to VLAN 'n'\n"
7710
#else
7711
           "-net tap[,vlan=n][,fd=h][,ifname=name][,script=file][,downscript=dfile]\n"
7712
           "                connect the host TAP network interface to VLAN 'n' and use the\n"
7713
           "                network scripts 'file' (default=%s)\n"
7714
           "                and 'dfile' (default=%s);\n"
7715
           "                use '[down]script=no' to disable script execution;\n"
7716
           "                use 'fd=h' to connect to an already opened TAP interface\n"
7717
#endif
7718
           "-net socket[,vlan=n][,fd=h][,listen=[host]:port][,connect=host:port]\n"
7719
           "                connect the vlan 'n' to another VLAN using a socket connection\n"
7720
           "-net socket[,vlan=n][,fd=h][,mcast=maddr:port]\n"
7721
           "                connect the vlan 'n' to multicast maddr and port\n"
7722
#ifdef CONFIG_VDE
7723
           "-net vde[,vlan=n][,sock=socketpath][,port=n][,group=groupname][,mode=octalmode]\n"
7724
           "                connect the vlan 'n' to port 'n' of a vde switch running\n"
7725
           "                on host and listening for incoming connections on 'socketpath'.\n"
7726
           "                Use group 'groupname' and mode 'octalmode' to change default\n"
7727
           "                ownership and permissions for communication port.\n"
7728
#endif
7729
           "-net none       use it alone to have zero network devices; if no -net option\n"
7730
           "                is provided, the default is '-net nic -net user'\n"
7731
           "\n"
7732
#ifdef CONFIG_SLIRP
7733
           "-tftp dir       allow tftp access to files in dir [-net user]\n"
7734
           "-bootp file     advertise file in BOOTP replies\n"
7735
#ifndef _WIN32
7736
           "-smb dir        allow SMB access to files in 'dir' [-net user]\n"
7737
#endif
7738
           "-redir [tcp|udp]:host-port:[guest-host]:guest-port\n"
7739
           "                redirect TCP or UDP connections from host to guest [-net user]\n"
7740
#endif
7741
           "\n"
7742
           "Linux boot specific:\n"
7743
           "-kernel bzImage use 'bzImage' as kernel image\n"
7744
           "-append cmdline use 'cmdline' as kernel command line\n"
7745
           "-initrd file    use 'file' as initial ram disk\n"
7746
           "\n"
7747
           "Debug/Expert options:\n"
7748
           "-monitor dev    redirect the monitor to char device 'dev'\n"
7749
           "-serial dev     redirect the serial port to char device 'dev'\n"
7750
           "-parallel dev   redirect the parallel port to char device 'dev'\n"
7751
           "-pidfile file   Write PID to 'file'\n"
7752
           "-S              freeze CPU at startup (use 'c' to start execution)\n"
7753
           "-s              wait gdb connection to port\n"
7754
           "-p port         set gdb connection port [default=%s]\n"
7755
           "-d item1,...    output log to %s (use -d ? for a list of log items)\n"
7756
           "-hdachs c,h,s[,t]  force hard disk 0 physical geometry and the optional BIOS\n"
7757
           "                translation (t=none or lba) (usually qemu can guess them)\n"
7758
           "-L path         set the directory for the BIOS, VGA BIOS and keymaps\n"
7759
#ifdef USE_KQEMU
7760
           "-kernel-kqemu   enable KQEMU full virtualization (default is user mode only)\n"
7761
           "-no-kqemu       disable KQEMU kernel module usage\n"
7762
#endif
7763
#ifdef TARGET_I386
7764
           "-std-vga        simulate a standard VGA card with VESA Bochs Extensions\n"
7765
           "                (default is CL-GD5446 PCI VGA)\n"
7766
           "-no-acpi        disable ACPI\n"
7767
#endif
7768
#ifdef CONFIG_CURSES
7769
           "-curses         use a curses/ncurses interface instead of SDL\n"
7770
#endif
7771
           "-no-reboot      exit instead of rebooting\n"
7772
           "-no-shutdown    stop before shutdown\n"
7773
           "-loadvm [tag|id]  start right away with a saved state (loadvm in monitor)\n"
7774
           "-vnc display    start a VNC server on display\n"
7775
#ifndef _WIN32
7776
           "-daemonize      daemonize QEMU after initializing\n"
7777
#endif
7778
           "-option-rom rom load a file, rom, into the option ROM space\n"
7779
#ifdef TARGET_SPARC
7780
           "-prom-env variable=value  set OpenBIOS nvram variables\n"
7781
#endif
7782
           "-clock          force the use of the given methods for timer alarm.\n"
7783
           "                To see what timers are available use -clock ?\n"
7784
           "-startdate      select initial date of the clock\n"
7785
           "-icount [N|auto]\n"
7786
           "                Enable virtual instruction counter with 2^N clock ticks per instruction\n"
7787
           "\n"
7788
           "During emulation, the following keys are useful:\n"
7789
           "ctrl-alt-f      toggle full screen\n"
7790
           "ctrl-alt-n      switch to virtual console 'n'\n"
7791
           "ctrl-alt        toggle mouse and keyboard grab\n"
7792
           "\n"
7793
           "When using -nographic, press 'ctrl-a h' to get some help.\n"
7794
           ,
7795
           "qemu",
7796
           DEFAULT_RAM_SIZE,
7797
#ifndef _WIN32
7798
           DEFAULT_NETWORK_SCRIPT,
7799
           DEFAULT_NETWORK_DOWN_SCRIPT,
7800
#endif
7801
           DEFAULT_GDBSTUB_PORT,
7802
           "/tmp/qemu.log");
7803
    exit(exitcode);
7804
}
7805

    
7806
#define HAS_ARG 0x0001
7807

    
7808
enum {
7809
    QEMU_OPTION_h,
7810

    
7811
    QEMU_OPTION_M,
7812
    QEMU_OPTION_cpu,
7813
    QEMU_OPTION_fda,
7814
    QEMU_OPTION_fdb,
7815
    QEMU_OPTION_hda,
7816
    QEMU_OPTION_hdb,
7817
    QEMU_OPTION_hdc,
7818
    QEMU_OPTION_hdd,
7819
    QEMU_OPTION_drive,
7820
    QEMU_OPTION_cdrom,
7821
    QEMU_OPTION_mtdblock,
7822
    QEMU_OPTION_sd,
7823
    QEMU_OPTION_pflash,
7824
    QEMU_OPTION_boot,
7825
    QEMU_OPTION_snapshot,
7826
#ifdef TARGET_I386
7827
    QEMU_OPTION_no_fd_bootchk,
7828
#endif
7829
    QEMU_OPTION_m,
7830
    QEMU_OPTION_nographic,
7831
    QEMU_OPTION_portrait,
7832
#ifdef HAS_AUDIO
7833
    QEMU_OPTION_audio_help,
7834
    QEMU_OPTION_soundhw,
7835
#endif
7836

    
7837
    QEMU_OPTION_net,
7838
    QEMU_OPTION_tftp,
7839
    QEMU_OPTION_bootp,
7840
    QEMU_OPTION_smb,
7841
    QEMU_OPTION_redir,
7842

    
7843
    QEMU_OPTION_kernel,
7844
    QEMU_OPTION_append,
7845
    QEMU_OPTION_initrd,
7846

    
7847
    QEMU_OPTION_S,
7848
    QEMU_OPTION_s,
7849
    QEMU_OPTION_p,
7850
    QEMU_OPTION_d,
7851
    QEMU_OPTION_hdachs,
7852
    QEMU_OPTION_L,
7853
    QEMU_OPTION_bios,
7854
    QEMU_OPTION_k,
7855
    QEMU_OPTION_localtime,
7856
    QEMU_OPTION_cirrusvga,
7857
    QEMU_OPTION_vmsvga,
7858
    QEMU_OPTION_g,
7859
    QEMU_OPTION_std_vga,
7860
    QEMU_OPTION_echr,
7861
    QEMU_OPTION_monitor,
7862
    QEMU_OPTION_serial,
7863
    QEMU_OPTION_parallel,
7864
    QEMU_OPTION_loadvm,
7865
    QEMU_OPTION_full_screen,
7866
    QEMU_OPTION_no_frame,
7867
    QEMU_OPTION_alt_grab,
7868
    QEMU_OPTION_no_quit,
7869
    QEMU_OPTION_pidfile,
7870
    QEMU_OPTION_no_kqemu,
7871
    QEMU_OPTION_kernel_kqemu,
7872
    QEMU_OPTION_win2k_hack,
7873
    QEMU_OPTION_usb,
7874
    QEMU_OPTION_usbdevice,
7875
    QEMU_OPTION_smp,
7876
    QEMU_OPTION_vnc,
7877
    QEMU_OPTION_no_acpi,
7878
    QEMU_OPTION_curses,
7879
    QEMU_OPTION_no_reboot,
7880
    QEMU_OPTION_no_shutdown,
7881
    QEMU_OPTION_show_cursor,
7882
    QEMU_OPTION_daemonize,
7883
    QEMU_OPTION_option_rom,
7884
    QEMU_OPTION_semihosting,
7885
    QEMU_OPTION_name,
7886
    QEMU_OPTION_prom_env,
7887
    QEMU_OPTION_old_param,
7888
    QEMU_OPTION_clock,
7889
    QEMU_OPTION_startdate,
7890
    QEMU_OPTION_tb_size,
7891
    QEMU_OPTION_icount,
7892
};
7893

    
7894
typedef struct QEMUOption {
7895
    const char *name;
7896
    int flags;
7897
    int index;
7898
} QEMUOption;
7899

    
7900
const QEMUOption qemu_options[] = {
7901
    { "h", 0, QEMU_OPTION_h },
7902
    { "help", 0, QEMU_OPTION_h },
7903

    
7904
    { "M", HAS_ARG, QEMU_OPTION_M },
7905
    { "cpu", HAS_ARG, QEMU_OPTION_cpu },
7906
    { "fda", HAS_ARG, QEMU_OPTION_fda },
7907
    { "fdb", HAS_ARG, QEMU_OPTION_fdb },
7908
    { "hda", HAS_ARG, QEMU_OPTION_hda },
7909
    { "hdb", HAS_ARG, QEMU_OPTION_hdb },
7910
    { "hdc", HAS_ARG, QEMU_OPTION_hdc },
7911
    { "hdd", HAS_ARG, QEMU_OPTION_hdd },
7912
    { "drive", HAS_ARG, QEMU_OPTION_drive },
7913
    { "cdrom", HAS_ARG, QEMU_OPTION_cdrom },
7914
    { "mtdblock", HAS_ARG, QEMU_OPTION_mtdblock },
7915
    { "sd", HAS_ARG, QEMU_OPTION_sd },
7916
    { "pflash", HAS_ARG, QEMU_OPTION_pflash },
7917
    { "boot", HAS_ARG, QEMU_OPTION_boot },
7918
    { "snapshot", 0, QEMU_OPTION_snapshot },
7919
#ifdef TARGET_I386
7920
    { "no-fd-bootchk", 0, QEMU_OPTION_no_fd_bootchk },
7921
#endif
7922
    { "m", HAS_ARG, QEMU_OPTION_m },
7923
    { "nographic", 0, QEMU_OPTION_nographic },
7924
    { "portrait", 0, QEMU_OPTION_portrait },
7925
    { "k", HAS_ARG, QEMU_OPTION_k },
7926
#ifdef HAS_AUDIO
7927
    { "audio-help", 0, QEMU_OPTION_audio_help },
7928
    { "soundhw", HAS_ARG, QEMU_OPTION_soundhw },
7929
#endif
7930

    
7931
    { "net", HAS_ARG, QEMU_OPTION_net},
7932
#ifdef CONFIG_SLIRP
7933
    { "tftp", HAS_ARG, QEMU_OPTION_tftp },
7934
    { "bootp", HAS_ARG, QEMU_OPTION_bootp },
7935
#ifndef _WIN32
7936
    { "smb", HAS_ARG, QEMU_OPTION_smb },
7937
#endif
7938
    { "redir", HAS_ARG, QEMU_OPTION_redir },
7939
#endif
7940

    
7941
    { "kernel", HAS_ARG, QEMU_OPTION_kernel },
7942
    { "append", HAS_ARG, QEMU_OPTION_append },
7943
    { "initrd", HAS_ARG, QEMU_OPTION_initrd },
7944

    
7945
    { "S", 0, QEMU_OPTION_S },
7946
    { "s", 0, QEMU_OPTION_s },
7947
    { "p", HAS_ARG, QEMU_OPTION_p },
7948
    { "d", HAS_ARG, QEMU_OPTION_d },
7949
    { "hdachs", HAS_ARG, QEMU_OPTION_hdachs },
7950
    { "L", HAS_ARG, QEMU_OPTION_L },
7951
    { "bios", HAS_ARG, QEMU_OPTION_bios },
7952
#ifdef USE_KQEMU
7953
    { "no-kqemu", 0, QEMU_OPTION_no_kqemu },
7954
    { "kernel-kqemu", 0, QEMU_OPTION_kernel_kqemu },
7955
#endif
7956
#if defined(TARGET_PPC) || defined(TARGET_SPARC)
7957
    { "g", 1, QEMU_OPTION_g },
7958
#endif
7959
    { "localtime", 0, QEMU_OPTION_localtime },
7960
    { "std-vga", 0, QEMU_OPTION_std_vga },
7961
    { "echr", HAS_ARG, QEMU_OPTION_echr },
7962
    { "monitor", HAS_ARG, QEMU_OPTION_monitor },
7963
    { "serial", HAS_ARG, QEMU_OPTION_serial },
7964
    { "parallel", HAS_ARG, QEMU_OPTION_parallel },
7965
    { "loadvm", HAS_ARG, QEMU_OPTION_loadvm },
7966
    { "full-screen", 0, QEMU_OPTION_full_screen },
7967
#ifdef CONFIG_SDL
7968
    { "no-frame", 0, QEMU_OPTION_no_frame },
7969
    { "alt-grab", 0, QEMU_OPTION_alt_grab },
7970
    { "no-quit", 0, QEMU_OPTION_no_quit },
7971
#endif
7972
    { "pidfile", HAS_ARG, QEMU_OPTION_pidfile },
7973
    { "win2k-hack", 0, QEMU_OPTION_win2k_hack },
7974
    { "usbdevice", HAS_ARG, QEMU_OPTION_usbdevice },
7975
    { "smp", HAS_ARG, QEMU_OPTION_smp },
7976
    { "vnc", HAS_ARG, QEMU_OPTION_vnc },
7977
#ifdef CONFIG_CURSES
7978
    { "curses", 0, QEMU_OPTION_curses },
7979
#endif
7980

    
7981
    /* temporary options */
7982
    { "usb", 0, QEMU_OPTION_usb },
7983
    { "cirrusvga", 0, QEMU_OPTION_cirrusvga },
7984
    { "vmwarevga", 0, QEMU_OPTION_vmsvga },
7985
    { "no-acpi", 0, QEMU_OPTION_no_acpi },
7986
    { "no-reboot", 0, QEMU_OPTION_no_reboot },
7987
    { "no-shutdown", 0, QEMU_OPTION_no_shutdown },
7988
    { "show-cursor", 0, QEMU_OPTION_show_cursor },
7989
    { "daemonize", 0, QEMU_OPTION_daemonize },
7990
    { "option-rom", HAS_ARG, QEMU_OPTION_option_rom },
7991
#if defined(TARGET_ARM) || defined(TARGET_M68K)
7992
    { "semihosting", 0, QEMU_OPTION_semihosting },
7993
#endif
7994
    { "name", HAS_ARG, QEMU_OPTION_name },
7995
#if defined(TARGET_SPARC)
7996
    { "prom-env", HAS_ARG, QEMU_OPTION_prom_env },
7997
#endif
7998
#if defined(TARGET_ARM)
7999
    { "old-param", 0, QEMU_OPTION_old_param },
8000
#endif
8001
    { "clock", HAS_ARG, QEMU_OPTION_clock },
8002
    { "startdate", HAS_ARG, QEMU_OPTION_startdate },
8003
    { "tb-size", HAS_ARG, QEMU_OPTION_tb_size },
8004
    { "icount", HAS_ARG, QEMU_OPTION_icount },
8005
    { NULL },
8006
};
8007

    
8008
/* password input */
8009

    
8010
int qemu_key_check(BlockDriverState *bs, const char *name)
8011
{
8012
    char password[256];
8013
    int i;
8014

    
8015
    if (!bdrv_is_encrypted(bs))
8016
        return 0;
8017

    
8018
    term_printf("%s is encrypted.\n", name);
8019
    for(i = 0; i < 3; i++) {
8020
        monitor_readline("Password: ", 1, password, sizeof(password));
8021
        if (bdrv_set_key(bs, password) == 0)
8022
            return 0;
8023
        term_printf("invalid password\n");
8024
    }
8025
    return -EPERM;
8026
}
8027

    
8028
static BlockDriverState *get_bdrv(int index)
8029
{
8030
    if (index > nb_drives)
8031
        return NULL;
8032
    return drives_table[index].bdrv;
8033
}
8034

    
8035
static void read_passwords(void)
8036
{
8037
    BlockDriverState *bs;
8038
    int i;
8039

    
8040
    for(i = 0; i < 6; i++) {
8041
        bs = get_bdrv(i);
8042
        if (bs)
8043
            qemu_key_check(bs, bdrv_get_device_name(bs));
8044
    }
8045
}
8046

    
8047
#ifdef HAS_AUDIO
8048
struct soundhw soundhw[] = {
8049
#ifdef HAS_AUDIO_CHOICE
8050
#if defined(TARGET_I386) || defined(TARGET_MIPS)
8051
    {
8052
        "pcspk",
8053
        "PC speaker",
8054
        0,
8055
        1,
8056
        { .init_isa = pcspk_audio_init }
8057
    },
8058
#endif
8059
    {
8060
        "sb16",
8061
        "Creative Sound Blaster 16",
8062
        0,
8063
        1,
8064
        { .init_isa = SB16_init }
8065
    },
8066

    
8067
#ifdef CONFIG_CS4231A
8068
    {
8069
        "cs4231a",
8070
        "CS4231A",
8071
        0,
8072
        1,
8073
        { .init_isa = cs4231a_init }
8074
    },
8075
#endif
8076

    
8077
#ifdef CONFIG_ADLIB
8078
    {
8079
        "adlib",
8080
#ifdef HAS_YMF262
8081
        "Yamaha YMF262 (OPL3)",
8082
#else
8083
        "Yamaha YM3812 (OPL2)",
8084
#endif
8085
        0,
8086
        1,
8087
        { .init_isa = Adlib_init }
8088
    },
8089
#endif
8090

    
8091
#ifdef CONFIG_GUS
8092
    {
8093
        "gus",
8094
        "Gravis Ultrasound GF1",
8095
        0,
8096
        1,
8097
        { .init_isa = GUS_init }
8098
    },
8099
#endif
8100

    
8101
#ifdef CONFIG_AC97
8102
    {
8103
        "ac97",
8104
        "Intel 82801AA AC97 Audio",
8105
        0,
8106
        0,
8107
        { .init_pci = ac97_init }
8108
    },
8109
#endif
8110

    
8111
    {
8112
        "es1370",
8113
        "ENSONIQ AudioPCI ES1370",
8114
        0,
8115
        0,
8116
        { .init_pci = es1370_init }
8117
    },
8118
#endif
8119

    
8120
    { NULL, NULL, 0, 0, { NULL } }
8121
};
8122

    
8123
static void select_soundhw (const char *optarg)
8124
{
8125
    struct soundhw *c;
8126

    
8127
    if (*optarg == '?') {
8128
    show_valid_cards:
8129

    
8130
        printf ("Valid sound card names (comma separated):\n");
8131
        for (c = soundhw; c->name; ++c) {
8132
            printf ("%-11s %s\n", c->name, c->descr);
8133
        }
8134
        printf ("\n-soundhw all will enable all of the above\n");
8135
        exit (*optarg != '?');
8136
    }
8137
    else {
8138
        size_t l;
8139
        const char *p;
8140
        char *e;
8141
        int bad_card = 0;
8142

    
8143
        if (!strcmp (optarg, "all")) {
8144
            for (c = soundhw; c->name; ++c) {
8145
                c->enabled = 1;
8146
            }
8147
            return;
8148
        }
8149

    
8150
        p = optarg;
8151
        while (*p) {
8152
            e = strchr (p, ',');
8153
            l = !e ? strlen (p) : (size_t) (e - p);
8154

    
8155
            for (c = soundhw; c->name; ++c) {
8156
                if (!strncmp (c->name, p, l)) {
8157
                    c->enabled = 1;
8158
                    break;
8159
                }
8160
            }
8161

    
8162
            if (!c->name) {
8163
                if (l > 80) {
8164
                    fprintf (stderr,
8165
                             "Unknown sound card name (too big to show)\n");
8166
                }
8167
                else {
8168
                    fprintf (stderr, "Unknown sound card name `%.*s'\n",
8169
                             (int) l, p);
8170
                }
8171
                bad_card = 1;
8172
            }
8173
            p += l + (e != NULL);
8174
        }
8175

    
8176
        if (bad_card)
8177
            goto show_valid_cards;
8178
    }
8179
}
8180
#endif
8181

    
8182
#ifdef _WIN32
8183
static BOOL WINAPI qemu_ctrl_handler(DWORD type)
8184
{
8185
    exit(STATUS_CONTROL_C_EXIT);
8186
    return TRUE;
8187
}
8188
#endif
8189

    
8190
#define MAX_NET_CLIENTS 32
8191

    
8192
#ifndef _WIN32
8193

    
8194
static void termsig_handler(int signal)
8195
{
8196
    qemu_system_shutdown_request();
8197
}
8198

    
8199
void termsig_setup(void)
8200
{
8201
    struct sigaction act;
8202

    
8203
    memset(&act, 0, sizeof(act));
8204
    act.sa_handler = termsig_handler;
8205
    sigaction(SIGINT,  &act, NULL);
8206
    sigaction(SIGHUP,  &act, NULL);
8207
    sigaction(SIGTERM, &act, NULL);
8208
}
8209

    
8210
#endif
8211

    
8212
int main(int argc, char **argv)
8213
{
8214
#ifdef CONFIG_GDBSTUB
8215
    int use_gdbstub;
8216
    const char *gdbstub_port;
8217
#endif
8218
    uint32_t boot_devices_bitmap = 0;
8219
    int i;
8220
    int snapshot, linux_boot, net_boot;
8221
    const char *initrd_filename;
8222
    const char *kernel_filename, *kernel_cmdline;
8223
    const char *boot_devices = "";
8224
    DisplayState *ds = &display_state;
8225
    int cyls, heads, secs, translation;
8226
    const char *net_clients[MAX_NET_CLIENTS];
8227
    int nb_net_clients;
8228
    int hda_index;
8229
    int optind;
8230
    const char *r, *optarg;
8231
    CharDriverState *monitor_hd;
8232
    const char *monitor_device;
8233
    const char *serial_devices[MAX_SERIAL_PORTS];
8234
    int serial_device_index;
8235
    const char *parallel_devices[MAX_PARALLEL_PORTS];
8236
    int parallel_device_index;
8237
    const char *loadvm = NULL;
8238
    QEMUMachine *machine;
8239
    const char *cpu_model;
8240
    const char *usb_devices[MAX_USB_CMDLINE];
8241
    int usb_devices_index;
8242
    int fds[2];
8243
    int tb_size;
8244
    const char *pid_file = NULL;
8245
    VLANState *vlan;
8246

    
8247
    LIST_INIT (&vm_change_state_head);
8248
#ifndef _WIN32
8249
    {
8250
        struct sigaction act;
8251
        sigfillset(&act.sa_mask);
8252
        act.sa_flags = 0;
8253
        act.sa_handler = SIG_IGN;
8254
        sigaction(SIGPIPE, &act, NULL);
8255
    }
8256
#else
8257
    SetConsoleCtrlHandler(qemu_ctrl_handler, TRUE);
8258
    /* Note: cpu_interrupt() is currently not SMP safe, so we force
8259
       QEMU to run on a single CPU */
8260
    {
8261
        HANDLE h;
8262
        DWORD mask, smask;
8263
        int i;
8264
        h = GetCurrentProcess();
8265
        if (GetProcessAffinityMask(h, &mask, &smask)) {
8266
            for(i = 0; i < 32; i++) {
8267
                if (mask & (1 << i))
8268
                    break;
8269
            }
8270
            if (i != 32) {
8271
                mask = 1 << i;
8272
                SetProcessAffinityMask(h, mask);
8273
            }
8274
        }
8275
    }
8276
#endif
8277

    
8278
    register_machines();
8279
    machine = first_machine;
8280
    cpu_model = NULL;
8281
    initrd_filename = NULL;
8282
    ram_size = 0;
8283
    vga_ram_size = VGA_RAM_SIZE;
8284
#ifdef CONFIG_GDBSTUB
8285
    use_gdbstub = 0;
8286
    gdbstub_port = DEFAULT_GDBSTUB_PORT;
8287
#endif
8288
    snapshot = 0;
8289
    nographic = 0;
8290
    curses = 0;
8291
    kernel_filename = NULL;
8292
    kernel_cmdline = "";
8293
    cyls = heads = secs = 0;
8294
    translation = BIOS_ATA_TRANSLATION_AUTO;
8295
    monitor_device = "vc";
8296

    
8297
    serial_devices[0] = "vc:80Cx24C";
8298
    for(i = 1; i < MAX_SERIAL_PORTS; i++)
8299
        serial_devices[i] = NULL;
8300
    serial_device_index = 0;
8301

    
8302
    parallel_devices[0] = "vc:640x480";
8303
    for(i = 1; i < MAX_PARALLEL_PORTS; i++)
8304
        parallel_devices[i] = NULL;
8305
    parallel_device_index = 0;
8306

    
8307
    usb_devices_index = 0;
8308

    
8309
    nb_net_clients = 0;
8310
    nb_drives = 0;
8311
    nb_drives_opt = 0;
8312
    hda_index = -1;
8313

    
8314
    nb_nics = 0;
8315

    
8316
    tb_size = 0;
8317
    
8318
    optind = 1;
8319
    for(;;) {
8320
        if (optind >= argc)
8321
            break;
8322
        r = argv[optind];
8323
        if (r[0] != '-') {
8324
            hda_index = drive_add(argv[optind++], HD_ALIAS, 0);
8325
        } else {
8326
            const QEMUOption *popt;
8327

    
8328
            optind++;
8329
            /* Treat --foo the same as -foo.  */
8330
            if (r[1] == '-')
8331
                r++;
8332
            popt = qemu_options;
8333
            for(;;) {
8334
                if (!popt->name) {
8335
                    fprintf(stderr, "%s: invalid option -- '%s'\n",
8336
                            argv[0], r);
8337
                    exit(1);
8338
                }
8339
                if (!strcmp(popt->name, r + 1))
8340
                    break;
8341
                popt++;
8342
            }
8343
            if (popt->flags & HAS_ARG) {
8344
                if (optind >= argc) {
8345
                    fprintf(stderr, "%s: option '%s' requires an argument\n",
8346
                            argv[0], r);
8347
                    exit(1);
8348
                }
8349
                optarg = argv[optind++];
8350
            } else {
8351
                optarg = NULL;
8352
            }
8353

    
8354
            switch(popt->index) {
8355
            case QEMU_OPTION_M:
8356
                machine = find_machine(optarg);
8357
                if (!machine) {
8358
                    QEMUMachine *m;
8359
                    printf("Supported machines are:\n");
8360
                    for(m = first_machine; m != NULL; m = m->next) {
8361
                        printf("%-10s %s%s\n",
8362
                               m->name, m->desc,
8363
                               m == first_machine ? " (default)" : "");
8364
                    }
8365
                    exit(*optarg != '?');
8366
                }
8367
                break;
8368
            case QEMU_OPTION_cpu:
8369
                /* hw initialization will check this */
8370
                if (*optarg == '?') {
8371
/* XXX: implement xxx_cpu_list for targets that still miss it */
8372
#if defined(cpu_list)
8373
                    cpu_list(stdout, &fprintf);
8374
#endif
8375
                    exit(0);
8376
                } else {
8377
                    cpu_model = optarg;
8378
                }
8379
                break;
8380
            case QEMU_OPTION_initrd:
8381
                initrd_filename = optarg;
8382
                break;
8383
            case QEMU_OPTION_hda:
8384
                if (cyls == 0)
8385
                    hda_index = drive_add(optarg, HD_ALIAS, 0);
8386
                else
8387
                    hda_index = drive_add(optarg, HD_ALIAS
8388
                             ",cyls=%d,heads=%d,secs=%d%s",
8389
                             0, cyls, heads, secs,
8390
                             translation == BIOS_ATA_TRANSLATION_LBA ?
8391
                                 ",trans=lba" :
8392
                             translation == BIOS_ATA_TRANSLATION_NONE ?
8393
                                 ",trans=none" : "");
8394
                 break;
8395
            case QEMU_OPTION_hdb:
8396
            case QEMU_OPTION_hdc:
8397
            case QEMU_OPTION_hdd:
8398
                drive_add(optarg, HD_ALIAS, popt->index - QEMU_OPTION_hda);
8399
                break;
8400
            case QEMU_OPTION_drive:
8401
                drive_add(NULL, "%s", optarg);
8402
                break;
8403
            case QEMU_OPTION_mtdblock:
8404
                drive_add(optarg, MTD_ALIAS);
8405
                break;
8406
            case QEMU_OPTION_sd:
8407
                drive_add(optarg, SD_ALIAS);
8408
                break;
8409
            case QEMU_OPTION_pflash:
8410
                drive_add(optarg, PFLASH_ALIAS);
8411
                break;
8412
            case QEMU_OPTION_snapshot:
8413
                snapshot = 1;
8414
                break;
8415
            case QEMU_OPTION_hdachs:
8416
                {
8417
                    const char *p;
8418
                    p = optarg;
8419
                    cyls = strtol(p, (char **)&p, 0);
8420
                    if (cyls < 1 || cyls > 16383)
8421
                        goto chs_fail;
8422
                    if (*p != ',')
8423
                        goto chs_fail;
8424
                    p++;
8425
                    heads = strtol(p, (char **)&p, 0);
8426
                    if (heads < 1 || heads > 16)
8427
                        goto chs_fail;
8428
                    if (*p != ',')
8429
                        goto chs_fail;
8430
                    p++;
8431
                    secs = strtol(p, (char **)&p, 0);
8432
                    if (secs < 1 || secs > 63)
8433
                        goto chs_fail;
8434
                    if (*p == ',') {
8435
                        p++;
8436
                        if (!strcmp(p, "none"))
8437
                            translation = BIOS_ATA_TRANSLATION_NONE;
8438
                        else if (!strcmp(p, "lba"))
8439
                            translation = BIOS_ATA_TRANSLATION_LBA;
8440
                        else if (!strcmp(p, "auto"))
8441
                            translation = BIOS_ATA_TRANSLATION_AUTO;
8442
                        else
8443
                            goto chs_fail;
8444
                    } else if (*p != '\0') {
8445
                    chs_fail:
8446
                        fprintf(stderr, "qemu: invalid physical CHS format\n");
8447
                        exit(1);
8448
                    }
8449
                    if (hda_index != -1)
8450
                        snprintf(drives_opt[hda_index].opt,
8451
                                 sizeof(drives_opt[hda_index].opt),
8452
                                 HD_ALIAS ",cyls=%d,heads=%d,secs=%d%s",
8453
                                 0, cyls, heads, secs,
8454
                                 translation == BIOS_ATA_TRANSLATION_LBA ?
8455
                                         ",trans=lba" :
8456
                                 translation == BIOS_ATA_TRANSLATION_NONE ?
8457
                                     ",trans=none" : "");
8458
                }
8459
                break;
8460
            case QEMU_OPTION_nographic:
8461
                nographic = 1;
8462
                break;
8463
#ifdef CONFIG_CURSES
8464
            case QEMU_OPTION_curses:
8465
                curses = 1;
8466
                break;
8467
#endif
8468
            case QEMU_OPTION_portrait:
8469
                graphic_rotate = 1;
8470
                break;
8471
            case QEMU_OPTION_kernel:
8472
                kernel_filename = optarg;
8473
                break;
8474
            case QEMU_OPTION_append:
8475
                kernel_cmdline = optarg;
8476
                break;
8477
            case QEMU_OPTION_cdrom:
8478
                drive_add(optarg, CDROM_ALIAS);
8479
                break;
8480
            case QEMU_OPTION_boot:
8481
                boot_devices = optarg;
8482
                /* We just do some generic consistency checks */
8483
                {
8484
                    /* Could easily be extended to 64 devices if needed */
8485
                    const char *p;
8486
                    
8487
                    boot_devices_bitmap = 0;
8488
                    for (p = boot_devices; *p != '\0'; p++) {
8489
                        /* Allowed boot devices are:
8490
                         * a b     : floppy disk drives
8491
                         * c ... f : IDE disk drives
8492
                         * g ... m : machine implementation dependant drives
8493
                         * n ... p : network devices
8494
                         * It's up to each machine implementation to check
8495
                         * if the given boot devices match the actual hardware
8496
                         * implementation and firmware features.
8497
                         */
8498
                        if (*p < 'a' || *p > 'q') {
8499
                            fprintf(stderr, "Invalid boot device '%c'\n", *p);
8500
                            exit(1);
8501
                        }
8502
                        if (boot_devices_bitmap & (1 << (*p - 'a'))) {
8503
                            fprintf(stderr,
8504
                                    "Boot device '%c' was given twice\n",*p);
8505
                            exit(1);
8506
                        }
8507
                        boot_devices_bitmap |= 1 << (*p - 'a');
8508
                    }
8509
                }
8510
                break;
8511
            case QEMU_OPTION_fda:
8512
            case QEMU_OPTION_fdb:
8513
                drive_add(optarg, FD_ALIAS, popt->index - QEMU_OPTION_fda);
8514
                break;
8515
#ifdef TARGET_I386
8516
            case QEMU_OPTION_no_fd_bootchk:
8517
                fd_bootchk = 0;
8518
                break;
8519
#endif
8520
            case QEMU_OPTION_net:
8521
                if (nb_net_clients >= MAX_NET_CLIENTS) {
8522
                    fprintf(stderr, "qemu: too many network clients\n");
8523
                    exit(1);
8524
                }
8525
                net_clients[nb_net_clients] = optarg;
8526
                nb_net_clients++;
8527
                break;
8528
#ifdef CONFIG_SLIRP
8529
            case QEMU_OPTION_tftp:
8530
                tftp_prefix = optarg;
8531
                break;
8532
            case QEMU_OPTION_bootp:
8533
                bootp_filename = optarg;
8534
                break;
8535
#ifndef _WIN32
8536
            case QEMU_OPTION_smb:
8537
                net_slirp_smb(optarg);
8538
                break;
8539
#endif
8540
            case QEMU_OPTION_redir:
8541
                net_slirp_redir(optarg);
8542
                break;
8543
#endif
8544
#ifdef HAS_AUDIO
8545
            case QEMU_OPTION_audio_help:
8546
                AUD_help ();
8547
                exit (0);
8548
                break;
8549
            case QEMU_OPTION_soundhw:
8550
                select_soundhw (optarg);
8551
                break;
8552
#endif
8553
            case QEMU_OPTION_h:
8554
                help(0);
8555
                break;
8556
            case QEMU_OPTION_m: {
8557
                uint64_t value;
8558
                char *ptr;
8559

    
8560
                value = strtoul(optarg, &ptr, 10);
8561
                switch (*ptr) {
8562
                case 0: case 'M': case 'm':
8563
                    value <<= 20;
8564
                    break;
8565
                case 'G': case 'g':
8566
                    value <<= 30;
8567
                    break;
8568
                default:
8569
                    fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
8570
                    exit(1);
8571
                }
8572

    
8573
                /* On 32-bit hosts, QEMU is limited by virtual address space */
8574
                if (value > (2047 << 20)
8575
#ifndef USE_KQEMU
8576
                    && HOST_LONG_BITS == 32
8577
#endif
8578
                    ) {
8579
                    fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n");
8580
                    exit(1);
8581
                }
8582
                if (value != (uint64_t)(ram_addr_t)value) {
8583
                    fprintf(stderr, "qemu: ram size too large\n");
8584
                    exit(1);
8585
                }
8586
                ram_size = value;
8587
                break;
8588
            }
8589
            case QEMU_OPTION_d:
8590
                {
8591
                    int mask;
8592
                    CPULogItem *item;
8593

    
8594
                    mask = cpu_str_to_log_mask(optarg);
8595
                    if (!mask) {
8596
                        printf("Log items (comma separated):\n");
8597
                    for(item = cpu_log_items; item->mask != 0; item++) {
8598
                        printf("%-10s %s\n", item->name, item->help);
8599
                    }
8600
                    exit(1);
8601
                    }
8602
                    cpu_set_log(mask);
8603
                }
8604
                break;
8605
#ifdef CONFIG_GDBSTUB
8606
            case QEMU_OPTION_s:
8607
                use_gdbstub = 1;
8608
                break;
8609
            case QEMU_OPTION_p:
8610
                gdbstub_port = optarg;
8611
                break;
8612
#endif
8613
            case QEMU_OPTION_L:
8614
                bios_dir = optarg;
8615
                break;
8616
            case QEMU_OPTION_bios:
8617
                bios_name = optarg;
8618
                break;
8619
            case QEMU_OPTION_S:
8620
                autostart = 0;
8621
                break;
8622
            case QEMU_OPTION_k:
8623
                keyboard_layout = optarg;
8624
                break;
8625
            case QEMU_OPTION_localtime:
8626
                rtc_utc = 0;
8627
                break;
8628
            case QEMU_OPTION_cirrusvga:
8629
                cirrus_vga_enabled = 1;
8630
                vmsvga_enabled = 0;
8631
                break;
8632
            case QEMU_OPTION_vmsvga:
8633
                cirrus_vga_enabled = 0;
8634
                vmsvga_enabled = 1;
8635
                break;
8636
            case QEMU_OPTION_std_vga:
8637
                cirrus_vga_enabled = 0;
8638
                vmsvga_enabled = 0;
8639
                break;
8640
            case QEMU_OPTION_g:
8641
                {
8642
                    const char *p;
8643
                    int w, h, depth;
8644
                    p = optarg;
8645
                    w = strtol(p, (char **)&p, 10);
8646
                    if (w <= 0) {
8647
                    graphic_error:
8648
                        fprintf(stderr, "qemu: invalid resolution or depth\n");
8649
                        exit(1);
8650
                    }
8651
                    if (*p != 'x')
8652
                        goto graphic_error;
8653
                    p++;
8654
                    h = strtol(p, (char **)&p, 10);
8655
                    if (h <= 0)
8656
                        goto graphic_error;
8657
                    if (*p == 'x') {
8658
                        p++;
8659
                        depth = strtol(p, (char **)&p, 10);
8660
                        if (depth != 8 && depth != 15 && depth != 16 &&
8661
                            depth != 24 && depth != 32)
8662
                            goto graphic_error;
8663
                    } else if (*p == '\0') {
8664
                        depth = graphic_depth;
8665
                    } else {
8666
                        goto graphic_error;
8667
                    }
8668

    
8669
                    graphic_width = w;
8670
                    graphic_height = h;
8671
                    graphic_depth = depth;
8672
                }
8673
                break;
8674
            case QEMU_OPTION_echr:
8675
                {
8676
                    char *r;
8677
                    term_escape_char = strtol(optarg, &r, 0);
8678
                    if (r == optarg)
8679
                        printf("Bad argument to echr\n");
8680
                    break;
8681
                }
8682
            case QEMU_OPTION_monitor:
8683
                monitor_device = optarg;
8684
                break;
8685
            case QEMU_OPTION_serial:
8686
                if (serial_device_index >= MAX_SERIAL_PORTS) {
8687
                    fprintf(stderr, "qemu: too many serial ports\n");
8688
                    exit(1);
8689
                }
8690
                serial_devices[serial_device_index] = optarg;
8691
                serial_device_index++;
8692
                break;
8693
            case QEMU_OPTION_parallel:
8694
                if (parallel_device_index >= MAX_PARALLEL_PORTS) {
8695
                    fprintf(stderr, "qemu: too many parallel ports\n");
8696
                    exit(1);
8697
                }
8698
                parallel_devices[parallel_device_index] = optarg;
8699
                parallel_device_index++;
8700
                break;
8701
            case QEMU_OPTION_loadvm:
8702
                loadvm = optarg;
8703
                break;
8704
            case QEMU_OPTION_full_screen:
8705
                full_screen = 1;
8706
                break;
8707
#ifdef CONFIG_SDL
8708
            case QEMU_OPTION_no_frame:
8709
                no_frame = 1;
8710
                break;
8711
            case QEMU_OPTION_alt_grab:
8712
                alt_grab = 1;
8713
                break;
8714
            case QEMU_OPTION_no_quit:
8715
                no_quit = 1;
8716
                break;
8717
#endif
8718
            case QEMU_OPTION_pidfile:
8719
                pid_file = optarg;
8720
                break;
8721
#ifdef TARGET_I386
8722
            case QEMU_OPTION_win2k_hack:
8723
                win2k_install_hack = 1;
8724
                break;
8725
#endif
8726
#ifdef USE_KQEMU
8727
            case QEMU_OPTION_no_kqemu:
8728
                kqemu_allowed = 0;
8729
                break;
8730
            case QEMU_OPTION_kernel_kqemu:
8731
                kqemu_allowed = 2;
8732
                break;
8733
#endif
8734
            case QEMU_OPTION_usb:
8735
                usb_enabled = 1;
8736
                break;
8737
            case QEMU_OPTION_usbdevice:
8738
                usb_enabled = 1;
8739
                if (usb_devices_index >= MAX_USB_CMDLINE) {
8740
                    fprintf(stderr, "Too many USB devices\n");
8741
                    exit(1);
8742
                }
8743
                usb_devices[usb_devices_index] = optarg;
8744
                usb_devices_index++;
8745
                break;
8746
            case QEMU_OPTION_smp:
8747
                smp_cpus = atoi(optarg);
8748
                if (smp_cpus < 1 || smp_cpus > MAX_CPUS) {
8749
                    fprintf(stderr, "Invalid number of CPUs\n");
8750
                    exit(1);
8751
                }
8752
                break;
8753
            case QEMU_OPTION_vnc:
8754
                vnc_display = optarg;
8755
                break;
8756
            case QEMU_OPTION_no_acpi:
8757
                acpi_enabled = 0;
8758
                break;
8759
            case QEMU_OPTION_no_reboot:
8760
                no_reboot = 1;
8761
                break;
8762
            case QEMU_OPTION_no_shutdown:
8763
                no_shutdown = 1;
8764
                break;
8765
            case QEMU_OPTION_show_cursor:
8766
                cursor_hide = 0;
8767
                break;
8768
            case QEMU_OPTION_daemonize:
8769
                daemonize = 1;
8770
                break;
8771
            case QEMU_OPTION_option_rom:
8772
                if (nb_option_roms >= MAX_OPTION_ROMS) {
8773
                    fprintf(stderr, "Too many option ROMs\n");
8774
                    exit(1);
8775
                }
8776
                option_rom[nb_option_roms] = optarg;
8777
                nb_option_roms++;
8778
                break;
8779
            case QEMU_OPTION_semihosting:
8780
                semihosting_enabled = 1;
8781
                break;
8782
            case QEMU_OPTION_name:
8783
                qemu_name = optarg;
8784
                break;
8785
#ifdef TARGET_SPARC
8786
            case QEMU_OPTION_prom_env:
8787
                if (nb_prom_envs >= MAX_PROM_ENVS) {
8788
                    fprintf(stderr, "Too many prom variables\n");
8789
                    exit(1);
8790
                }
8791
                prom_envs[nb_prom_envs] = optarg;
8792
                nb_prom_envs++;
8793
                break;
8794
#endif
8795
#ifdef TARGET_ARM
8796
            case QEMU_OPTION_old_param:
8797
                old_param = 1;
8798
                break;
8799
#endif
8800
            case QEMU_OPTION_clock:
8801
                configure_alarms(optarg);
8802
                break;
8803
            case QEMU_OPTION_startdate:
8804
                {
8805
                    struct tm tm;
8806
                    time_t rtc_start_date;
8807
                    if (!strcmp(optarg, "now")) {
8808
                        rtc_date_offset = -1;
8809
                    } else {
8810
                        if (sscanf(optarg, "%d-%d-%dT%d:%d:%d",
8811
                               &tm.tm_year,
8812
                               &tm.tm_mon,
8813
                               &tm.tm_mday,
8814
                               &tm.tm_hour,
8815
                               &tm.tm_min,
8816
                               &tm.tm_sec) == 6) {
8817
                            /* OK */
8818
                        } else if (sscanf(optarg, "%d-%d-%d",
8819
                                          &tm.tm_year,
8820
                                          &tm.tm_mon,
8821
                                          &tm.tm_mday) == 3) {
8822
                            tm.tm_hour = 0;
8823
                            tm.tm_min = 0;
8824
                            tm.tm_sec = 0;
8825
                        } else {
8826
                            goto date_fail;
8827
                        }
8828
                        tm.tm_year -= 1900;
8829
                        tm.tm_mon--;
8830
                        rtc_start_date = mktimegm(&tm);
8831
                        if (rtc_start_date == -1) {
8832
                        date_fail:
8833
                            fprintf(stderr, "Invalid date format. Valid format are:\n"
8834
                                    "'now' or '2006-06-17T16:01:21' or '2006-06-17'\n");
8835
                            exit(1);
8836
                        }
8837
                        rtc_date_offset = time(NULL) - rtc_start_date;
8838
                    }
8839
                }
8840
                break;
8841
            case QEMU_OPTION_tb_size:
8842
                tb_size = strtol(optarg, NULL, 0);
8843
                if (tb_size < 0)
8844
                    tb_size = 0;
8845
                break;
8846
            case QEMU_OPTION_icount:
8847
                use_icount = 1;
8848
                if (strcmp(optarg, "auto") == 0) {
8849
                    icount_time_shift = -1;
8850
                } else {
8851
                    icount_time_shift = strtol(optarg, NULL, 0);
8852
                }
8853
                break;
8854
            }
8855
        }
8856
    }
8857

    
8858
    if (nographic) {
8859
       if (serial_device_index == 0)
8860
           serial_devices[0] = "stdio";
8861
       if (parallel_device_index == 0)
8862
           parallel_devices[0] = "null";
8863
       if (strncmp(monitor_device, "vc", 2) == 0)
8864
           monitor_device = "stdio";
8865
    }
8866

    
8867
#ifndef _WIN32
8868
    if (daemonize) {
8869
        pid_t pid;
8870

    
8871
        if (pipe(fds) == -1)
8872
            exit(1);
8873

    
8874
        pid = fork();
8875
        if (pid > 0) {
8876
            uint8_t status;
8877
            ssize_t len;
8878

    
8879
            close(fds[1]);
8880

    
8881
        again:
8882
            len = read(fds[0], &status, 1);
8883
            if (len == -1 && (errno == EINTR))
8884
                goto again;
8885

    
8886
            if (len != 1)
8887
                exit(1);
8888
            else if (status == 1) {
8889
                fprintf(stderr, "Could not acquire pidfile\n");
8890
                exit(1);
8891
            } else
8892
                exit(0);
8893
        } else if (pid < 0)
8894
            exit(1);
8895

    
8896
        setsid();
8897

    
8898
        pid = fork();
8899
        if (pid > 0)
8900
            exit(0);
8901
        else if (pid < 0)
8902
            exit(1);
8903

    
8904
        umask(027);
8905

    
8906
        signal(SIGTSTP, SIG_IGN);
8907
        signal(SIGTTOU, SIG_IGN);
8908
        signal(SIGTTIN, SIG_IGN);
8909
    }
8910
#endif
8911

    
8912
    if (pid_file && qemu_create_pidfile(pid_file) != 0) {
8913
        if (daemonize) {
8914
            uint8_t status = 1;
8915
            write(fds[1], &status, 1);
8916
        } else
8917
            fprintf(stderr, "Could not acquire pid file\n");
8918
        exit(1);
8919
    }
8920

    
8921
#ifdef USE_KQEMU
8922
    if (smp_cpus > 1)
8923
        kqemu_allowed = 0;
8924
#endif
8925
    linux_boot = (kernel_filename != NULL);
8926
    net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
8927

    
8928
    if (!linux_boot && net_boot == 0 &&
8929
        !machine->nodisk_ok && nb_drives_opt == 0)
8930
        help(1);
8931

    
8932
    if (!linux_boot && *kernel_cmdline != '\0') {
8933
        fprintf(stderr, "-append only allowed with -kernel option\n");
8934
        exit(1);
8935
    }
8936

    
8937
    if (!linux_boot && initrd_filename != NULL) {
8938
        fprintf(stderr, "-initrd only allowed with -kernel option\n");
8939
        exit(1);
8940
    }
8941

    
8942
    /* boot to floppy or the default cd if no hard disk defined yet */
8943
    if (!boot_devices[0]) {
8944
        boot_devices = "cad";
8945
    }
8946
    setvbuf(stdout, NULL, _IOLBF, 0);
8947

    
8948
    init_timers();
8949
    init_timer_alarm();
8950
    qemu_aio_init();
8951
    if (use_icount && icount_time_shift < 0) {
8952
        use_icount = 2;
8953
        /* 125MIPS seems a reasonable initial guess at the guest speed.
8954
           It will be corrected fairly quickly anyway.  */
8955
        icount_time_shift = 3;
8956
        init_icount_adjust();
8957
    }
8958

    
8959
#ifdef _WIN32
8960
    socket_init();
8961
#endif
8962

    
8963
    /* init network clients */
8964
    if (nb_net_clients == 0) {
8965
        /* if no clients, we use a default config */
8966
        net_clients[0] = "nic";
8967
        net_clients[1] = "user";
8968
        nb_net_clients = 2;
8969
    }
8970

    
8971
    for(i = 0;i < nb_net_clients; i++) {
8972
        if (net_client_parse(net_clients[i]) < 0)
8973
            exit(1);
8974
    }
8975
    for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) {
8976
        if (vlan->nb_guest_devs == 0 && vlan->nb_host_devs == 0)
8977
            continue;
8978
        if (vlan->nb_guest_devs == 0)
8979
            fprintf(stderr, "Warning: vlan %d with no nics\n", vlan->id);
8980
        if (vlan->nb_host_devs == 0)
8981
            fprintf(stderr,
8982
                    "Warning: vlan %d is not connected to host network\n",
8983
                    vlan->id);
8984
    }
8985

    
8986
#ifdef TARGET_I386
8987
    /* XXX: this should be moved in the PC machine instantiation code */
8988
    if (net_boot != 0) {
8989
        int netroms = 0;
8990
        for (i = 0; i < nb_nics && i < 4; i++) {
8991
            const char *model = nd_table[i].model;
8992
            char buf[1024];
8993
            if (net_boot & (1 << i)) {
8994
                if (model == NULL)
8995
                    model = "ne2k_pci";
8996
                snprintf(buf, sizeof(buf), "%s/pxe-%s.bin", bios_dir, model);
8997
                if (get_image_size(buf) > 0) {
8998
                    if (nb_option_roms >= MAX_OPTION_ROMS) {
8999
                        fprintf(stderr, "Too many option ROMs\n");
9000
                        exit(1);
9001
                    }
9002
                    option_rom[nb_option_roms] = strdup(buf);
9003
                    nb_option_roms++;
9004
                    netroms++;
9005
                }
9006
            }
9007
        }
9008
        if (netroms == 0) {
9009
            fprintf(stderr, "No valid PXE rom found for network device\n");
9010
            exit(1);
9011
        }
9012
    }
9013
#endif
9014

    
9015
    /* init the memory */
9016
    phys_ram_size = machine->ram_require & ~RAMSIZE_FIXED;
9017

    
9018
    if (machine->ram_require & RAMSIZE_FIXED) {
9019
        if (ram_size > 0) {
9020
            if (ram_size < phys_ram_size) {
9021
                fprintf(stderr, "Machine `%s' requires %llu bytes of memory\n",
9022
                                machine->name, (unsigned long long) phys_ram_size);
9023
                exit(-1);
9024
            }
9025

    
9026
            phys_ram_size = ram_size;
9027
        } else
9028
            ram_size = phys_ram_size;
9029
    } else {
9030
        if (ram_size == 0)
9031
            ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
9032

    
9033
        phys_ram_size += ram_size;
9034
    }
9035

    
9036
    phys_ram_base = qemu_vmalloc(phys_ram_size);
9037
    if (!phys_ram_base) {
9038
        fprintf(stderr, "Could not allocate physical memory\n");
9039
        exit(1);
9040
    }
9041

    
9042
    /* init the dynamic translator */
9043
    cpu_exec_init_all(tb_size * 1024 * 1024);
9044

    
9045
    bdrv_init();
9046

    
9047
    /* we always create the cdrom drive, even if no disk is there */
9048

    
9049
    if (nb_drives_opt < MAX_DRIVES)
9050
        drive_add(NULL, CDROM_ALIAS);
9051

    
9052
    /* we always create at least one floppy */
9053

    
9054
    if (nb_drives_opt < MAX_DRIVES)
9055
        drive_add(NULL, FD_ALIAS, 0);
9056

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

    
9059
    if (nb_drives_opt < MAX_DRIVES)
9060
        drive_add(NULL, SD_ALIAS);
9061

    
9062
    /* open the virtual block devices */
9063

    
9064
    for(i = 0; i < nb_drives_opt; i++)
9065
        if (drive_init(&drives_opt[i], snapshot, machine) == -1)
9066
            exit(1);
9067

    
9068
    register_savevm("timer", 0, 2, timer_save, timer_load, NULL);
9069
    register_savevm("ram", 0, 2, ram_save, ram_load, NULL);
9070

    
9071
    /* terminal init */
9072
    memset(&display_state, 0, sizeof(display_state));
9073
    if (nographic) {
9074
        if (curses) {
9075
            fprintf(stderr, "fatal: -nographic can't be used with -curses\n");
9076
            exit(1);
9077
        }
9078
        /* nearly nothing to do */
9079
        dumb_display_init(ds);
9080
    } else if (vnc_display != NULL) {
9081
        vnc_display_init(ds);
9082
        if (vnc_display_open(ds, vnc_display) < 0)
9083
            exit(1);
9084
    } else
9085
#if defined(CONFIG_CURSES)
9086
    if (curses) {
9087
        curses_display_init(ds, full_screen);
9088
    } else
9089
#endif
9090
    {
9091
#if defined(CONFIG_SDL)
9092
        sdl_display_init(ds, full_screen, no_frame);
9093
#elif defined(CONFIG_COCOA)
9094
        cocoa_display_init(ds, full_screen);
9095
#else
9096
        dumb_display_init(ds);
9097
#endif
9098
    }
9099

    
9100
#ifndef _WIN32
9101
    /* must be after terminal init, SDL library changes signal handlers */
9102
    termsig_setup();
9103
#endif
9104

    
9105
    /* Maintain compatibility with multiple stdio monitors */
9106
    if (!strcmp(monitor_device,"stdio")) {
9107
        for (i = 0; i < MAX_SERIAL_PORTS; i++) {
9108
            const char *devname = serial_devices[i];
9109
            if (devname && !strcmp(devname,"mon:stdio")) {
9110
                monitor_device = NULL;
9111
                break;
9112
            } else if (devname && !strcmp(devname,"stdio")) {
9113
                monitor_device = NULL;
9114
                serial_devices[i] = "mon:stdio";
9115
                break;
9116
            }
9117
        }
9118
    }
9119
    if (monitor_device) {
9120
        monitor_hd = qemu_chr_open(monitor_device);
9121
        if (!monitor_hd) {
9122
            fprintf(stderr, "qemu: could not open monitor device '%s'\n", monitor_device);
9123
            exit(1);
9124
        }
9125
        monitor_init(monitor_hd, !nographic);
9126
    }
9127

    
9128
    for(i = 0; i < MAX_SERIAL_PORTS; i++) {
9129
        const char *devname = serial_devices[i];
9130
        if (devname && strcmp(devname, "none")) {
9131
            serial_hds[i] = qemu_chr_open(devname);
9132
            if (!serial_hds[i]) {
9133
                fprintf(stderr, "qemu: could not open serial device '%s'\n",
9134
                        devname);
9135
                exit(1);
9136
            }
9137
            if (strstart(devname, "vc", 0))
9138
                qemu_chr_printf(serial_hds[i], "serial%d console\r\n", i);
9139
        }
9140
    }
9141

    
9142
    for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
9143
        const char *devname = parallel_devices[i];
9144
        if (devname && strcmp(devname, "none")) {
9145
            parallel_hds[i] = qemu_chr_open(devname);
9146
            if (!parallel_hds[i]) {
9147
                fprintf(stderr, "qemu: could not open parallel device '%s'\n",
9148
                        devname);
9149
                exit(1);
9150
            }
9151
            if (strstart(devname, "vc", 0))
9152
                qemu_chr_printf(parallel_hds[i], "parallel%d console\r\n", i);
9153
        }
9154
    }
9155

    
9156
    machine->init(ram_size, vga_ram_size, boot_devices, ds,
9157
                  kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
9158

    
9159
    /* init USB devices */
9160
    if (usb_enabled) {
9161
        for(i = 0; i < usb_devices_index; i++) {
9162
            if (usb_device_add(usb_devices[i]) < 0) {
9163
                fprintf(stderr, "Warning: could not add USB device %s\n",
9164
                        usb_devices[i]);
9165
            }
9166
        }
9167
    }
9168

    
9169
    if (display_state.dpy_refresh) {
9170
        display_state.gui_timer = qemu_new_timer(rt_clock, gui_update, &display_state);
9171
        qemu_mod_timer(display_state.gui_timer, qemu_get_clock(rt_clock));
9172
    }
9173

    
9174
#ifdef CONFIG_GDBSTUB
9175
    if (use_gdbstub) {
9176
        /* XXX: use standard host:port notation and modify options
9177
           accordingly. */
9178
        if (gdbserver_start(gdbstub_port) < 0) {
9179
            fprintf(stderr, "qemu: could not open gdbstub device on port '%s'\n",
9180
                    gdbstub_port);
9181
            exit(1);
9182
        }
9183
    }
9184
#endif
9185

    
9186
    if (loadvm)
9187
        do_loadvm(loadvm);
9188

    
9189
    {
9190
        /* XXX: simplify init */
9191
        read_passwords();
9192
        if (autostart) {
9193
            vm_start();
9194
        }
9195
    }
9196

    
9197
    if (daemonize) {
9198
        uint8_t status = 0;
9199
        ssize_t len;
9200
        int fd;
9201

    
9202
    again1:
9203
        len = write(fds[1], &status, 1);
9204
        if (len == -1 && (errno == EINTR))
9205
            goto again1;
9206

    
9207
        if (len != 1)
9208
            exit(1);
9209

    
9210
        chdir("/");
9211
        TFR(fd = open("/dev/null", O_RDWR));
9212
        if (fd == -1)
9213
            exit(1);
9214

    
9215
        dup2(fd, 0);
9216
        dup2(fd, 1);
9217
        dup2(fd, 2);
9218

    
9219
        close(fd);
9220
    }
9221

    
9222
    main_loop();
9223
    quit_timers();
9224

    
9225
#if !defined(_WIN32)
9226
    /* close network clients */
9227
    for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) {
9228
        VLANClientState *vc;
9229

    
9230
        for(vc = vlan->first_client; vc != NULL; vc = vc->next) {
9231
            if (vc->fd_read == tap_receive) {
9232
                char ifname[64];
9233
                TAPState *s = vc->opaque;
9234

    
9235
                if (sscanf(vc->info_str, "tap: ifname=%63s ", ifname) == 1 &&
9236
                    s->down_script[0])
9237
                    launch_script(s->down_script, ifname, s->fd);
9238
            }
9239
#if defined(CONFIG_VDE)
9240
            if (vc->fd_read == vde_from_qemu) {
9241
                VDEState *s = vc->opaque;
9242
                vde_close(s->vde);
9243
            }
9244
#endif
9245
        }
9246
    }
9247
#endif
9248
    return 0;
9249
}