Statistics
| Branch: | Revision:

root / vl.c @ 87b47350

History | View | Annotate | Download (176 kB)

1
/*
2
 * QEMU System Emulator
3
 * 
4
 * Copyright (c) 2003-2006 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 "vl.h"
25

    
26
#include <unistd.h>
27
#include <fcntl.h>
28
#include <signal.h>
29
#include <time.h>
30
#include <errno.h>
31
#include <sys/time.h>
32
#include <zlib.h>
33

    
34
#ifndef _WIN32
35
#include <sys/times.h>
36
#include <sys/wait.h>
37
#include <termios.h>
38
#include <sys/poll.h>
39
#include <sys/mman.h>
40
#include <sys/ioctl.h>
41
#include <sys/socket.h>
42
#include <netinet/in.h>
43
#include <dirent.h>
44
#include <netdb.h>
45
#ifdef _BSD
46
#include <sys/stat.h>
47
#ifndef __APPLE__
48
#include <libutil.h>
49
#endif
50
#else
51
#ifndef __sun__
52
#include <linux/if.h>
53
#include <linux/if_tun.h>
54
#include <pty.h>
55
#include <malloc.h>
56
#include <linux/rtc.h>
57
#include <linux/ppdev.h>
58
#endif
59
#endif
60
#endif
61

    
62
#if defined(CONFIG_SLIRP)
63
#include "libslirp.h"
64
#endif
65

    
66
#ifdef _WIN32
67
#include <malloc.h>
68
#include <sys/timeb.h>
69
#include <windows.h>
70
#define getopt_long_only getopt_long
71
#define memalign(align, size) malloc(size)
72
#endif
73

    
74
#include "qemu_socket.h"
75

    
76
#ifdef CONFIG_SDL
77
#ifdef __APPLE__
78
#include <SDL/SDL.h>
79
#endif
80
#endif /* CONFIG_SDL */
81

    
82
#ifdef CONFIG_COCOA
83
#undef main
84
#define main qemu_main
85
#endif /* CONFIG_COCOA */
86

    
87
#include "disas.h"
88

    
89
#include "exec-all.h"
90

    
91
#define DEFAULT_NETWORK_SCRIPT "/etc/qemu-ifup"
92

    
93
//#define DEBUG_UNUSED_IOPORT
94
//#define DEBUG_IOPORT
95

    
96
#define PHYS_RAM_MAX_SIZE (2047 * 1024 * 1024)
97

    
98
#ifdef TARGET_PPC
99
#define DEFAULT_RAM_SIZE 144
100
#else
101
#define DEFAULT_RAM_SIZE 128
102
#endif
103
/* in ms */
104
#define GUI_REFRESH_INTERVAL 30
105

    
106
/* Max number of USB devices that can be specified on the commandline.  */
107
#define MAX_USB_CMDLINE 8
108

    
109
/* XXX: use a two level table to limit memory usage */
110
#define MAX_IOPORTS 65536
111

    
112
const char *bios_dir = CONFIG_QEMU_SHAREDIR;
113
char phys_ram_file[1024];
114
void *ioport_opaque[MAX_IOPORTS];
115
IOPortReadFunc *ioport_read_table[3][MAX_IOPORTS];
116
IOPortWriteFunc *ioport_write_table[3][MAX_IOPORTS];
117
/* Note: bs_table[MAX_DISKS] is a dummy block driver if none available
118
   to store the VM snapshots */
119
BlockDriverState *bs_table[MAX_DISKS + 1], *fd_table[MAX_FD];
120
/* point to the block driver where the snapshots are managed */
121
BlockDriverState *bs_snapshots;
122
int vga_ram_size;
123
int bios_size;
124
static DisplayState display_state;
125
int nographic;
126
const char* keyboard_layout = NULL;
127
int64_t ticks_per_sec;
128
int boot_device = 'c';
129
int ram_size;
130
int pit_min_timer_count = 0;
131
int nb_nics;
132
NICInfo nd_table[MAX_NICS];
133
QEMUTimer *gui_timer;
134
int vm_running;
135
int rtc_utc = 1;
136
int cirrus_vga_enabled = 1;
137
#ifdef TARGET_SPARC
138
int graphic_width = 1024;
139
int graphic_height = 768;
140
#else
141
int graphic_width = 800;
142
int graphic_height = 600;
143
#endif
144
int graphic_depth = 15;
145
int full_screen = 0;
146
CharDriverState *serial_hds[MAX_SERIAL_PORTS];
147
CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
148
#ifdef TARGET_I386
149
int win2k_install_hack = 0;
150
#endif
151
int usb_enabled = 0;
152
static VLANState *first_vlan;
153
int smp_cpus = 1;
154
int vnc_display = -1;
155
#if defined(TARGET_SPARC)
156
#define MAX_CPUS 16
157
#elif defined(TARGET_I386)
158
#define MAX_CPUS 255
159
#else
160
#define MAX_CPUS 1
161
#endif
162
int acpi_enabled = 1;
163
int fd_bootchk = 1;
164

    
165
/***********************************************************/
166
/* x86 ISA bus support */
167

    
168
target_phys_addr_t isa_mem_base = 0;
169
PicState2 *isa_pic;
170

    
171
uint32_t default_ioport_readb(void *opaque, uint32_t address)
172
{
173
#ifdef DEBUG_UNUSED_IOPORT
174
    fprintf(stderr, "inb: port=0x%04x\n", address);
175
#endif
176
    return 0xff;
177
}
178

    
179
void default_ioport_writeb(void *opaque, uint32_t address, uint32_t data)
180
{
181
#ifdef DEBUG_UNUSED_IOPORT
182
    fprintf(stderr, "outb: port=0x%04x data=0x%02x\n", address, data);
183
#endif
184
}
185

    
186
/* default is to make two byte accesses */
187
uint32_t default_ioport_readw(void *opaque, uint32_t address)
188
{
189
    uint32_t data;
190
    data = ioport_read_table[0][address](ioport_opaque[address], address);
191
    address = (address + 1) & (MAX_IOPORTS - 1);
192
    data |= ioport_read_table[0][address](ioport_opaque[address], address) << 8;
193
    return data;
194
}
195

    
196
void default_ioport_writew(void *opaque, uint32_t address, uint32_t data)
197
{
198
    ioport_write_table[0][address](ioport_opaque[address], address, data & 0xff);
199
    address = (address + 1) & (MAX_IOPORTS - 1);
200
    ioport_write_table[0][address](ioport_opaque[address], address, (data >> 8) & 0xff);
201
}
202

    
203
uint32_t default_ioport_readl(void *opaque, uint32_t address)
204
{
205
#ifdef DEBUG_UNUSED_IOPORT
206
    fprintf(stderr, "inl: port=0x%04x\n", address);
207
#endif
208
    return 0xffffffff;
209
}
210

    
211
void default_ioport_writel(void *opaque, uint32_t address, uint32_t data)
212
{
213
#ifdef DEBUG_UNUSED_IOPORT
214
    fprintf(stderr, "outl: port=0x%04x data=0x%02x\n", address, data);
215
#endif
216
}
217

    
218
void init_ioports(void)
219
{
220
    int i;
221

    
222
    for(i = 0; i < MAX_IOPORTS; i++) {
223
        ioport_read_table[0][i] = default_ioport_readb;
224
        ioport_write_table[0][i] = default_ioport_writeb;
225
        ioport_read_table[1][i] = default_ioport_readw;
226
        ioport_write_table[1][i] = default_ioport_writew;
227
        ioport_read_table[2][i] = default_ioport_readl;
228
        ioport_write_table[2][i] = default_ioport_writel;
229
    }
230
}
231

    
232
/* size is the word size in byte */
233
int register_ioport_read(int start, int length, int size, 
234
                         IOPortReadFunc *func, void *opaque)
235
{
236
    int i, bsize;
237

    
238
    if (size == 1) {
239
        bsize = 0;
240
    } else if (size == 2) {
241
        bsize = 1;
242
    } else if (size == 4) {
243
        bsize = 2;
244
    } else {
245
        hw_error("register_ioport_read: invalid size");
246
        return -1;
247
    }
248
    for(i = start; i < start + length; i += size) {
249
        ioport_read_table[bsize][i] = func;
250
        if (ioport_opaque[i] != NULL && ioport_opaque[i] != opaque)
251
            hw_error("register_ioport_read: invalid opaque");
252
        ioport_opaque[i] = opaque;
253
    }
254
    return 0;
255
}
256

    
257
/* size is the word size in byte */
258
int register_ioport_write(int start, int length, int size, 
259
                          IOPortWriteFunc *func, void *opaque)
260
{
261
    int i, bsize;
262

    
263
    if (size == 1) {
264
        bsize = 0;
265
    } else if (size == 2) {
266
        bsize = 1;
267
    } else if (size == 4) {
268
        bsize = 2;
269
    } else {
270
        hw_error("register_ioport_write: invalid size");
271
        return -1;
272
    }
273
    for(i = start; i < start + length; i += size) {
274
        ioport_write_table[bsize][i] = func;
275
        if (ioport_opaque[i] != NULL && ioport_opaque[i] != opaque)
276
            hw_error("register_ioport_read: invalid opaque");
277
        ioport_opaque[i] = opaque;
278
    }
279
    return 0;
280
}
281

    
282
void isa_unassign_ioport(int start, int length)
283
{
284
    int i;
285

    
286
    for(i = start; i < start + length; i++) {
287
        ioport_read_table[0][i] = default_ioport_readb;
288
        ioport_read_table[1][i] = default_ioport_readw;
289
        ioport_read_table[2][i] = default_ioport_readl;
290

    
291
        ioport_write_table[0][i] = default_ioport_writeb;
292
        ioport_write_table[1][i] = default_ioport_writew;
293
        ioport_write_table[2][i] = default_ioport_writel;
294
    }
295
}
296

    
297
/***********************************************************/
298

    
299
void pstrcpy(char *buf, int buf_size, const char *str)
300
{
301
    int c;
302
    char *q = buf;
303

    
304
    if (buf_size <= 0)
305
        return;
306

    
307
    for(;;) {
308
        c = *str++;
309
        if (c == 0 || q >= buf + buf_size - 1)
310
            break;
311
        *q++ = c;
312
    }
313
    *q = '\0';
314
}
315

    
316
/* strcat and truncate. */
317
char *pstrcat(char *buf, int buf_size, const char *s)
318
{
319
    int len;
320
    len = strlen(buf);
321
    if (len < buf_size) 
322
        pstrcpy(buf + len, buf_size - len, s);
323
    return buf;
324
}
325

    
326
int strstart(const char *str, const char *val, const char **ptr)
327
{
328
    const char *p, *q;
329
    p = str;
330
    q = val;
331
    while (*q != '\0') {
332
        if (*p != *q)
333
            return 0;
334
        p++;
335
        q++;
336
    }
337
    if (ptr)
338
        *ptr = p;
339
    return 1;
340
}
341

    
342
void cpu_outb(CPUState *env, int addr, int val)
343
{
344
#ifdef DEBUG_IOPORT
345
    if (loglevel & CPU_LOG_IOPORT)
346
        fprintf(logfile, "outb: %04x %02x\n", addr, val);
347
#endif    
348
    ioport_write_table[0][addr](ioport_opaque[addr], addr, val);
349
#ifdef USE_KQEMU
350
    if (env)
351
        env->last_io_time = cpu_get_time_fast();
352
#endif
353
}
354

    
355
void cpu_outw(CPUState *env, int addr, int val)
356
{
357
#ifdef DEBUG_IOPORT
358
    if (loglevel & CPU_LOG_IOPORT)
359
        fprintf(logfile, "outw: %04x %04x\n", addr, val);
360
#endif    
361
    ioport_write_table[1][addr](ioport_opaque[addr], addr, val);
362
#ifdef USE_KQEMU
363
    if (env)
364
        env->last_io_time = cpu_get_time_fast();
365
#endif
366
}
367

    
368
void cpu_outl(CPUState *env, int addr, int val)
369
{
370
#ifdef DEBUG_IOPORT
371
    if (loglevel & CPU_LOG_IOPORT)
372
        fprintf(logfile, "outl: %04x %08x\n", addr, val);
373
#endif
374
    ioport_write_table[2][addr](ioport_opaque[addr], addr, val);
375
#ifdef USE_KQEMU
376
    if (env)
377
        env->last_io_time = cpu_get_time_fast();
378
#endif
379
}
380

    
381
int cpu_inb(CPUState *env, int addr)
382
{
383
    int val;
384
    val = ioport_read_table[0][addr](ioport_opaque[addr], addr);
385
#ifdef DEBUG_IOPORT
386
    if (loglevel & CPU_LOG_IOPORT)
387
        fprintf(logfile, "inb : %04x %02x\n", addr, val);
388
#endif
389
#ifdef USE_KQEMU
390
    if (env)
391
        env->last_io_time = cpu_get_time_fast();
392
#endif
393
    return val;
394
}
395

    
396
int cpu_inw(CPUState *env, int addr)
397
{
398
    int val;
399
    val = ioport_read_table[1][addr](ioport_opaque[addr], addr);
400
#ifdef DEBUG_IOPORT
401
    if (loglevel & CPU_LOG_IOPORT)
402
        fprintf(logfile, "inw : %04x %04x\n", addr, val);
403
#endif
404
#ifdef USE_KQEMU
405
    if (env)
406
        env->last_io_time = cpu_get_time_fast();
407
#endif
408
    return val;
409
}
410

    
411
int cpu_inl(CPUState *env, int addr)
412
{
413
    int val;
414
    val = ioport_read_table[2][addr](ioport_opaque[addr], addr);
415
#ifdef DEBUG_IOPORT
416
    if (loglevel & CPU_LOG_IOPORT)
417
        fprintf(logfile, "inl : %04x %08x\n", addr, val);
418
#endif
419
#ifdef USE_KQEMU
420
    if (env)
421
        env->last_io_time = cpu_get_time_fast();
422
#endif
423
    return val;
424
}
425

    
426
/***********************************************************/
427
void hw_error(const char *fmt, ...)
428
{
429
    va_list ap;
430
    CPUState *env;
431

    
432
    va_start(ap, fmt);
433
    fprintf(stderr, "qemu: hardware error: ");
434
    vfprintf(stderr, fmt, ap);
435
    fprintf(stderr, "\n");
436
    for(env = first_cpu; env != NULL; env = env->next_cpu) {
437
        fprintf(stderr, "CPU #%d:\n", env->cpu_index);
438
#ifdef TARGET_I386
439
        cpu_dump_state(env, stderr, fprintf, X86_DUMP_FPU);
440
#else
441
        cpu_dump_state(env, stderr, fprintf, 0);
442
#endif
443
    }
444
    va_end(ap);
445
    abort();
446
}
447

    
448
/***********************************************************/
449
/* keyboard/mouse */
450

    
451
static QEMUPutKBDEvent *qemu_put_kbd_event;
452
static void *qemu_put_kbd_event_opaque;
453
static QEMUPutMouseEvent *qemu_put_mouse_event;
454
static void *qemu_put_mouse_event_opaque;
455
static int qemu_put_mouse_event_absolute;
456

    
457
void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
458
{
459
    qemu_put_kbd_event_opaque = opaque;
460
    qemu_put_kbd_event = func;
461
}
462

    
463
void qemu_add_mouse_event_handler(QEMUPutMouseEvent *func, void *opaque, int absolute)
464
{
465
    qemu_put_mouse_event_opaque = opaque;
466
    qemu_put_mouse_event = func;
467
    qemu_put_mouse_event_absolute = absolute;
468
}
469

    
470
void kbd_put_keycode(int keycode)
471
{
472
    if (qemu_put_kbd_event) {
473
        qemu_put_kbd_event(qemu_put_kbd_event_opaque, keycode);
474
    }
475
}
476

    
477
void kbd_mouse_event(int dx, int dy, int dz, int buttons_state)
478
{
479
    if (qemu_put_mouse_event) {
480
        qemu_put_mouse_event(qemu_put_mouse_event_opaque, 
481
                             dx, dy, dz, buttons_state);
482
    }
483
}
484

    
485
int kbd_mouse_is_absolute(void)
486
{
487
    return qemu_put_mouse_event_absolute;
488
}
489

    
490
/* compute with 96 bit intermediate result: (a*b)/c */
491
uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
492
{
493
    union {
494
        uint64_t ll;
495
        struct {
496
#ifdef WORDS_BIGENDIAN
497
            uint32_t high, low;
498
#else
499
            uint32_t low, high;
500
#endif            
501
        } l;
502
    } u, res;
503
    uint64_t rl, rh;
504

    
505
    u.ll = a;
506
    rl = (uint64_t)u.l.low * (uint64_t)b;
507
    rh = (uint64_t)u.l.high * (uint64_t)b;
508
    rh += (rl >> 32);
509
    res.l.high = rh / c;
510
    res.l.low = (((rh % c) << 32) + (rl & 0xffffffff)) / c;
511
    return res.ll;
512
}
513

    
514
/***********************************************************/
515
/* real time host monotonic timer */
516

    
517
#define QEMU_TIMER_BASE 1000000000LL
518

    
519
#ifdef WIN32
520

    
521
static int64_t clock_freq;
522

    
523
static void init_get_clock(void)
524
{
525
    LARGE_INTEGER freq;
526
    int ret;
527
    ret = QueryPerformanceFrequency(&freq);
528
    if (ret == 0) {
529
        fprintf(stderr, "Could not calibrate ticks\n");
530
        exit(1);
531
    }
532
    clock_freq = freq.QuadPart;
533
}
534

    
535
static int64_t get_clock(void)
536
{
537
    LARGE_INTEGER ti;
538
    QueryPerformanceCounter(&ti);
539
    return muldiv64(ti.QuadPart, QEMU_TIMER_BASE, clock_freq);
540
}
541

    
542
#else
543

    
544
static int use_rt_clock;
545

    
546
static void init_get_clock(void)
547
{
548
    use_rt_clock = 0;
549
#if defined(__linux__)
550
    {
551
        struct timespec ts;
552
        if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) {
553
            use_rt_clock = 1;
554
        }
555
    }
556
#endif
557
}
558

    
559
static int64_t get_clock(void)
560
{
561
#if defined(__linux__)
562
    if (use_rt_clock) {
563
        struct timespec ts;
564
        clock_gettime(CLOCK_MONOTONIC, &ts);
565
        return ts.tv_sec * 1000000000LL + ts.tv_nsec;
566
    } else 
567
#endif
568
    {
569
        /* XXX: using gettimeofday leads to problems if the date
570
           changes, so it should be avoided. */
571
        struct timeval tv;
572
        gettimeofday(&tv, NULL);
573
        return tv.tv_sec * 1000000000LL + (tv.tv_usec * 1000);
574
    }
575
}
576

    
577
#endif
578

    
579
/***********************************************************/
580
/* guest cycle counter */
581

    
582
static int64_t cpu_ticks_prev;
583
static int64_t cpu_ticks_offset;
584
static int64_t cpu_clock_offset;
585
static int cpu_ticks_enabled;
586

    
587
/* return the host CPU cycle counter and handle stop/restart */
588
int64_t cpu_get_ticks(void)
589
{
590
    if (!cpu_ticks_enabled) {
591
        return cpu_ticks_offset;
592
    } else {
593
        int64_t ticks;
594
        ticks = cpu_get_real_ticks();
595
        if (cpu_ticks_prev > ticks) {
596
            /* Note: non increasing ticks may happen if the host uses
597
               software suspend */
598
            cpu_ticks_offset += cpu_ticks_prev - ticks;
599
        }
600
        cpu_ticks_prev = ticks;
601
        return ticks + cpu_ticks_offset;
602
    }
603
}
604

    
605
/* return the host CPU monotonic timer and handle stop/restart */
606
static int64_t cpu_get_clock(void)
607
{
608
    int64_t ti;
609
    if (!cpu_ticks_enabled) {
610
        return cpu_clock_offset;
611
    } else {
612
        ti = get_clock();
613
        return ti + cpu_clock_offset;
614
    }
615
}
616

    
617
/* enable cpu_get_ticks() */
618
void cpu_enable_ticks(void)
619
{
620
    if (!cpu_ticks_enabled) {
621
        cpu_ticks_offset -= cpu_get_real_ticks();
622
        cpu_clock_offset -= get_clock();
623
        cpu_ticks_enabled = 1;
624
    }
625
}
626

    
627
/* disable cpu_get_ticks() : the clock is stopped. You must not call
628
   cpu_get_ticks() after that.  */
629
void cpu_disable_ticks(void)
630
{
631
    if (cpu_ticks_enabled) {
632
        cpu_ticks_offset = cpu_get_ticks();
633
        cpu_clock_offset = cpu_get_clock();
634
        cpu_ticks_enabled = 0;
635
    }
636
}
637

    
638
/***********************************************************/
639
/* timers */
640
 
641
#define QEMU_TIMER_REALTIME 0
642
#define QEMU_TIMER_VIRTUAL  1
643

    
644
struct QEMUClock {
645
    int type;
646
    /* XXX: add frequency */
647
};
648

    
649
struct QEMUTimer {
650
    QEMUClock *clock;
651
    int64_t expire_time;
652
    QEMUTimerCB *cb;
653
    void *opaque;
654
    struct QEMUTimer *next;
655
};
656

    
657
QEMUClock *rt_clock;
658
QEMUClock *vm_clock;
659

    
660
static QEMUTimer *active_timers[2];
661
#ifdef _WIN32
662
static MMRESULT timerID;
663
static HANDLE host_alarm = NULL;
664
static unsigned int period = 1;
665
#else
666
/* frequency of the times() clock tick */
667
static int timer_freq;
668
#endif
669

    
670
QEMUClock *qemu_new_clock(int type)
671
{
672
    QEMUClock *clock;
673
    clock = qemu_mallocz(sizeof(QEMUClock));
674
    if (!clock)
675
        return NULL;
676
    clock->type = type;
677
    return clock;
678
}
679

    
680
QEMUTimer *qemu_new_timer(QEMUClock *clock, QEMUTimerCB *cb, void *opaque)
681
{
682
    QEMUTimer *ts;
683

    
684
    ts = qemu_mallocz(sizeof(QEMUTimer));
685
    ts->clock = clock;
686
    ts->cb = cb;
687
    ts->opaque = opaque;
688
    return ts;
689
}
690

    
691
void qemu_free_timer(QEMUTimer *ts)
692
{
693
    qemu_free(ts);
694
}
695

    
696
/* stop a timer, but do not dealloc it */
697
void qemu_del_timer(QEMUTimer *ts)
698
{
699
    QEMUTimer **pt, *t;
700

    
701
    /* NOTE: this code must be signal safe because
702
       qemu_timer_expired() can be called from a signal. */
703
    pt = &active_timers[ts->clock->type];
704
    for(;;) {
705
        t = *pt;
706
        if (!t)
707
            break;
708
        if (t == ts) {
709
            *pt = t->next;
710
            break;
711
        }
712
        pt = &t->next;
713
    }
714
}
715

    
716
/* modify the current timer so that it will be fired when current_time
717
   >= expire_time. The corresponding callback will be called. */
718
void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time)
719
{
720
    QEMUTimer **pt, *t;
721

    
722
    qemu_del_timer(ts);
723

    
724
    /* add the timer in the sorted list */
725
    /* NOTE: this code must be signal safe because
726
       qemu_timer_expired() can be called from a signal. */
727
    pt = &active_timers[ts->clock->type];
728
    for(;;) {
729
        t = *pt;
730
        if (!t)
731
            break;
732
        if (t->expire_time > expire_time) 
733
            break;
734
        pt = &t->next;
735
    }
736
    ts->expire_time = expire_time;
737
    ts->next = *pt;
738
    *pt = ts;
739
}
740

    
741
int qemu_timer_pending(QEMUTimer *ts)
742
{
743
    QEMUTimer *t;
744
    for(t = active_timers[ts->clock->type]; t != NULL; t = t->next) {
745
        if (t == ts)
746
            return 1;
747
    }
748
    return 0;
749
}
750

    
751
static inline int qemu_timer_expired(QEMUTimer *timer_head, int64_t current_time)
752
{
753
    if (!timer_head)
754
        return 0;
755
    return (timer_head->expire_time <= current_time);
756
}
757

    
758
static void qemu_run_timers(QEMUTimer **ptimer_head, int64_t current_time)
759
{
760
    QEMUTimer *ts;
761
    
762
    for(;;) {
763
        ts = *ptimer_head;
764
        if (!ts || ts->expire_time > current_time)
765
            break;
766
        /* remove timer from the list before calling the callback */
767
        *ptimer_head = ts->next;
768
        ts->next = NULL;
769
        
770
        /* run the callback (the timer list can be modified) */
771
        ts->cb(ts->opaque);
772
    }
773
}
774

    
775
int64_t qemu_get_clock(QEMUClock *clock)
776
{
777
    switch(clock->type) {
778
    case QEMU_TIMER_REALTIME:
779
        return get_clock() / 1000000;
780
    default:
781
    case QEMU_TIMER_VIRTUAL:
782
        return cpu_get_clock();
783
    }
784
}
785

    
786
static void init_timers(void)
787
{
788
    init_get_clock();
789
    ticks_per_sec = QEMU_TIMER_BASE;
790
    rt_clock = qemu_new_clock(QEMU_TIMER_REALTIME);
791
    vm_clock = qemu_new_clock(QEMU_TIMER_VIRTUAL);
792
}
793

    
794
/* save a timer */
795
void qemu_put_timer(QEMUFile *f, QEMUTimer *ts)
796
{
797
    uint64_t expire_time;
798

    
799
    if (qemu_timer_pending(ts)) {
800
        expire_time = ts->expire_time;
801
    } else {
802
        expire_time = -1;
803
    }
804
    qemu_put_be64(f, expire_time);
805
}
806

    
807
void qemu_get_timer(QEMUFile *f, QEMUTimer *ts)
808
{
809
    uint64_t expire_time;
810

    
811
    expire_time = qemu_get_be64(f);
812
    if (expire_time != -1) {
813
        qemu_mod_timer(ts, expire_time);
814
    } else {
815
        qemu_del_timer(ts);
816
    }
817
}
818

    
819
static void timer_save(QEMUFile *f, void *opaque)
820
{
821
    if (cpu_ticks_enabled) {
822
        hw_error("cannot save state if virtual timers are running");
823
    }
824
    qemu_put_be64s(f, &cpu_ticks_offset);
825
    qemu_put_be64s(f, &ticks_per_sec);
826
    qemu_put_be64s(f, &cpu_clock_offset);
827
}
828

    
829
static int timer_load(QEMUFile *f, void *opaque, int version_id)
830
{
831
    if (version_id != 1 && version_id != 2)
832
        return -EINVAL;
833
    if (cpu_ticks_enabled) {
834
        return -EINVAL;
835
    }
836
    qemu_get_be64s(f, &cpu_ticks_offset);
837
    qemu_get_be64s(f, &ticks_per_sec);
838
    if (version_id == 2) {
839
        qemu_get_be64s(f, &cpu_clock_offset);
840
    }
841
    return 0;
842
}
843

    
844
#ifdef _WIN32
845
void CALLBACK host_alarm_handler(UINT uTimerID, UINT uMsg, 
846
                                 DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2)
847
#else
848
static void host_alarm_handler(int host_signum)
849
#endif
850
{
851
#if 0
852
#define DISP_FREQ 1000
853
    {
854
        static int64_t delta_min = INT64_MAX;
855
        static int64_t delta_max, delta_cum, last_clock, delta, ti;
856
        static int count;
857
        ti = qemu_get_clock(vm_clock);
858
        if (last_clock != 0) {
859
            delta = ti - last_clock;
860
            if (delta < delta_min)
861
                delta_min = delta;
862
            if (delta > delta_max)
863
                delta_max = delta;
864
            delta_cum += delta;
865
            if (++count == DISP_FREQ) {
866
                printf("timer: min=%" PRId64 " us max=%" PRId64 " us avg=%" PRId64 " us avg_freq=%0.3f Hz\n",
867
                       muldiv64(delta_min, 1000000, ticks_per_sec),
868
                       muldiv64(delta_max, 1000000, ticks_per_sec),
869
                       muldiv64(delta_cum, 1000000 / DISP_FREQ, ticks_per_sec),
870
                       (double)ticks_per_sec / ((double)delta_cum / DISP_FREQ));
871
                count = 0;
872
                delta_min = INT64_MAX;
873
                delta_max = 0;
874
                delta_cum = 0;
875
            }
876
        }
877
        last_clock = ti;
878
    }
879
#endif
880
    if (qemu_timer_expired(active_timers[QEMU_TIMER_VIRTUAL],
881
                           qemu_get_clock(vm_clock)) ||
882
        qemu_timer_expired(active_timers[QEMU_TIMER_REALTIME],
883
                           qemu_get_clock(rt_clock))) {
884
#ifdef _WIN32
885
        SetEvent(host_alarm);
886
#endif
887
        CPUState *env = cpu_single_env;
888
        if (env) {
889
            /* stop the currently executing cpu because a timer occured */
890
            cpu_interrupt(env, CPU_INTERRUPT_EXIT);
891
#ifdef USE_KQEMU
892
            if (env->kqemu_enabled) {
893
                kqemu_cpu_interrupt(env);
894
            }
895
#endif
896
        }
897
    }
898
}
899

    
900
#ifndef _WIN32
901

    
902
#if defined(__linux__)
903

    
904
#define RTC_FREQ 1024
905

    
906
static int rtc_fd;
907

    
908
static int start_rtc_timer(void)
909
{
910
    rtc_fd = open("/dev/rtc", O_RDONLY);
911
    if (rtc_fd < 0)
912
        return -1;
913
    if (ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
914
        fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
915
                "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
916
                "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
917
        goto fail;
918
    }
919
    if (ioctl(rtc_fd, RTC_PIE_ON, 0) < 0) {
920
    fail:
921
        close(rtc_fd);
922
        return -1;
923
    }
924
    pit_min_timer_count = PIT_FREQ / RTC_FREQ;
925
    return 0;
926
}
927

    
928
#else
929

    
930
static int start_rtc_timer(void)
931
{
932
    return -1;
933
}
934

    
935
#endif /* !defined(__linux__) */
936

    
937
#endif /* !defined(_WIN32) */
938

    
939
static void init_timer_alarm(void)
940
{
941
#ifdef _WIN32
942
    {
943
        int count=0;
944
        TIMECAPS tc;
945

    
946
        ZeroMemory(&tc, sizeof(TIMECAPS));
947
        timeGetDevCaps(&tc, sizeof(TIMECAPS));
948
        if (period < tc.wPeriodMin)
949
            period = tc.wPeriodMin;
950
        timeBeginPeriod(period);
951
        timerID = timeSetEvent(1,     // interval (ms)
952
                               period,     // resolution
953
                               host_alarm_handler, // function
954
                               (DWORD)&count,  // user parameter
955
                               TIME_PERIODIC | TIME_CALLBACK_FUNCTION);
956
         if( !timerID ) {
957
            perror("failed timer alarm");
958
            exit(1);
959
         }
960
        host_alarm = CreateEvent(NULL, FALSE, FALSE, NULL);
961
        if (!host_alarm) {
962
            perror("failed CreateEvent");
963
            exit(1);
964
        }
965
        qemu_add_wait_object(host_alarm, NULL, NULL);
966
    }
967
    pit_min_timer_count = ((uint64_t)10000 * PIT_FREQ) / 1000000;
968
#else
969
    {
970
        struct sigaction act;
971
        struct itimerval itv;
972
        
973
        /* get times() syscall frequency */
974
        timer_freq = sysconf(_SC_CLK_TCK);
975
        
976
        /* timer signal */
977
        sigfillset(&act.sa_mask);
978
       act.sa_flags = 0;
979
#if defined (TARGET_I386) && defined(USE_CODE_COPY)
980
        act.sa_flags |= SA_ONSTACK;
981
#endif
982
        act.sa_handler = host_alarm_handler;
983
        sigaction(SIGALRM, &act, NULL);
984

    
985
        itv.it_interval.tv_sec = 0;
986
        itv.it_interval.tv_usec = 999; /* for i386 kernel 2.6 to get 1 ms */
987
        itv.it_value.tv_sec = 0;
988
        itv.it_value.tv_usec = 10 * 1000;
989
        setitimer(ITIMER_REAL, &itv, NULL);
990
        /* we probe the tick duration of the kernel to inform the user if
991
           the emulated kernel requested a too high timer frequency */
992
        getitimer(ITIMER_REAL, &itv);
993

    
994
#if defined(__linux__)
995
        /* XXX: force /dev/rtc usage because even 2.6 kernels may not
996
           have timers with 1 ms resolution. The correct solution will
997
           be to use the POSIX real time timers available in recent
998
           2.6 kernels */
999
        if (itv.it_interval.tv_usec > 1000 || 1) {
1000
            /* try to use /dev/rtc to have a faster timer */
1001
            if (start_rtc_timer() < 0)
1002
                goto use_itimer;
1003
            /* disable itimer */
1004
            itv.it_interval.tv_sec = 0;
1005
            itv.it_interval.tv_usec = 0;
1006
            itv.it_value.tv_sec = 0;
1007
            itv.it_value.tv_usec = 0;
1008
            setitimer(ITIMER_REAL, &itv, NULL);
1009

    
1010
            /* use the RTC */
1011
            sigaction(SIGIO, &act, NULL);
1012
            fcntl(rtc_fd, F_SETFL, O_ASYNC);
1013
            fcntl(rtc_fd, F_SETOWN, getpid());
1014
        } else 
1015
#endif /* defined(__linux__) */
1016
        {
1017
        use_itimer:
1018
            pit_min_timer_count = ((uint64_t)itv.it_interval.tv_usec * 
1019
                                   PIT_FREQ) / 1000000;
1020
        }
1021
    }
1022
#endif
1023
}
1024

    
1025
void quit_timers(void)
1026
{
1027
#ifdef _WIN32
1028
    timeKillEvent(timerID);
1029
    timeEndPeriod(period);
1030
    if (host_alarm) {
1031
        CloseHandle(host_alarm);
1032
        host_alarm = NULL;
1033
    }
1034
#endif
1035
}
1036

    
1037
/***********************************************************/
1038
/* character device */
1039

    
1040
int qemu_chr_write(CharDriverState *s, const uint8_t *buf, int len)
1041
{
1042
    return s->chr_write(s, buf, len);
1043
}
1044

    
1045
int qemu_chr_ioctl(CharDriverState *s, int cmd, void *arg)
1046
{
1047
    if (!s->chr_ioctl)
1048
        return -ENOTSUP;
1049
    return s->chr_ioctl(s, cmd, arg);
1050
}
1051

    
1052
void qemu_chr_printf(CharDriverState *s, const char *fmt, ...)
1053
{
1054
    char buf[4096];
1055
    va_list ap;
1056
    va_start(ap, fmt);
1057
    vsnprintf(buf, sizeof(buf), fmt, ap);
1058
    qemu_chr_write(s, buf, strlen(buf));
1059
    va_end(ap);
1060
}
1061

    
1062
void qemu_chr_send_event(CharDriverState *s, int event)
1063
{
1064
    if (s->chr_send_event)
1065
        s->chr_send_event(s, event);
1066
}
1067

    
1068
void qemu_chr_add_read_handler(CharDriverState *s, 
1069
                               IOCanRWHandler *fd_can_read, 
1070
                               IOReadHandler *fd_read, void *opaque)
1071
{
1072
    s->chr_add_read_handler(s, fd_can_read, fd_read, opaque);
1073
}
1074
             
1075
void qemu_chr_add_event_handler(CharDriverState *s, IOEventHandler *chr_event)
1076
{
1077
    s->chr_event = chr_event;
1078
}
1079

    
1080
static int null_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
1081
{
1082
    return len;
1083
}
1084

    
1085
static void null_chr_add_read_handler(CharDriverState *chr, 
1086
                                    IOCanRWHandler *fd_can_read, 
1087
                                    IOReadHandler *fd_read, void *opaque)
1088
{
1089
}
1090

    
1091
CharDriverState *qemu_chr_open_null(void)
1092
{
1093
    CharDriverState *chr;
1094

    
1095
    chr = qemu_mallocz(sizeof(CharDriverState));
1096
    if (!chr)
1097
        return NULL;
1098
    chr->chr_write = null_chr_write;
1099
    chr->chr_add_read_handler = null_chr_add_read_handler;
1100
    return chr;
1101
}
1102

    
1103
#ifdef _WIN32
1104

    
1105
static void socket_cleanup(void)
1106
{
1107
    WSACleanup();
1108
}
1109

    
1110
static int socket_init(void)
1111
{
1112
    WSADATA Data;
1113
    int ret, err;
1114

    
1115
    ret = WSAStartup(MAKEWORD(2,2), &Data);
1116
    if (ret != 0) {
1117
        err = WSAGetLastError();
1118
        fprintf(stderr, "WSAStartup: %d\n", err);
1119
        return -1;
1120
    }
1121
    atexit(socket_cleanup);
1122
    return 0;
1123
}
1124

    
1125
static int send_all(int fd, const uint8_t *buf, int len1)
1126
{
1127
    int ret, len;
1128
    
1129
    len = len1;
1130
    while (len > 0) {
1131
        ret = send(fd, buf, len, 0);
1132
        if (ret < 0) {
1133
            int errno;
1134
            errno = WSAGetLastError();
1135
            if (errno != WSAEWOULDBLOCK) {
1136
                return -1;
1137
            }
1138
        } else if (ret == 0) {
1139
            break;
1140
        } else {
1141
            buf += ret;
1142
            len -= ret;
1143
        }
1144
    }
1145
    return len1 - len;
1146
}
1147

    
1148
void socket_set_nonblock(int fd)
1149
{
1150
    unsigned long opt = 1;
1151
    ioctlsocket(fd, FIONBIO, &opt);
1152
}
1153

    
1154
#else
1155

    
1156
static int unix_write(int fd, const uint8_t *buf, int len1)
1157
{
1158
    int ret, len;
1159

    
1160
    len = len1;
1161
    while (len > 0) {
1162
        ret = write(fd, buf, len);
1163
        if (ret < 0) {
1164
            if (errno != EINTR && errno != EAGAIN)
1165
                return -1;
1166
        } else if (ret == 0) {
1167
            break;
1168
        } else {
1169
            buf += ret;
1170
            len -= ret;
1171
        }
1172
    }
1173
    return len1 - len;
1174
}
1175

    
1176
static inline int send_all(int fd, const uint8_t *buf, int len1)
1177
{
1178
    return unix_write(fd, buf, len1);
1179
}
1180

    
1181
void socket_set_nonblock(int fd)
1182
{
1183
    fcntl(fd, F_SETFL, O_NONBLOCK);
1184
}
1185
#endif /* !_WIN32 */
1186

    
1187
#ifndef _WIN32
1188

    
1189
typedef struct {
1190
    int fd_in, fd_out;
1191
    IOCanRWHandler *fd_can_read; 
1192
    IOReadHandler *fd_read;
1193
    void *fd_opaque;
1194
    int max_size;
1195
} FDCharDriver;
1196

    
1197
#define STDIO_MAX_CLIENTS 2
1198

    
1199
static int stdio_nb_clients;
1200
static CharDriverState *stdio_clients[STDIO_MAX_CLIENTS];
1201

    
1202
static int fd_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
1203
{
1204
    FDCharDriver *s = chr->opaque;
1205
    return unix_write(s->fd_out, buf, len);
1206
}
1207

    
1208
static int fd_chr_read_poll(void *opaque)
1209
{
1210
    CharDriverState *chr = opaque;
1211
    FDCharDriver *s = chr->opaque;
1212

    
1213
    s->max_size = s->fd_can_read(s->fd_opaque);
1214
    return s->max_size;
1215
}
1216

    
1217
static void fd_chr_read(void *opaque)
1218
{
1219
    CharDriverState *chr = opaque;
1220
    FDCharDriver *s = chr->opaque;
1221
    int size, len;
1222
    uint8_t buf[1024];
1223
    
1224
    len = sizeof(buf);
1225
    if (len > s->max_size)
1226
        len = s->max_size;
1227
    if (len == 0)
1228
        return;
1229
    size = read(s->fd_in, buf, len);
1230
    if (size > 0) {
1231
        s->fd_read(s->fd_opaque, buf, size);
1232
    }
1233
}
1234

    
1235
static void fd_chr_add_read_handler(CharDriverState *chr, 
1236
                                    IOCanRWHandler *fd_can_read, 
1237
                                    IOReadHandler *fd_read, void *opaque)
1238
{
1239
    FDCharDriver *s = chr->opaque;
1240

    
1241
    if (s->fd_in >= 0) {
1242
        s->fd_can_read = fd_can_read;
1243
        s->fd_read = fd_read;
1244
        s->fd_opaque = opaque;
1245
        if (nographic && s->fd_in == 0) {
1246
        } else {
1247
            qemu_set_fd_handler2(s->fd_in, fd_chr_read_poll, 
1248
                                 fd_chr_read, NULL, chr);
1249
        }
1250
    }
1251
}
1252

    
1253
/* open a character device to a unix fd */
1254
CharDriverState *qemu_chr_open_fd(int fd_in, int fd_out)
1255
{
1256
    CharDriverState *chr;
1257
    FDCharDriver *s;
1258

    
1259
    chr = qemu_mallocz(sizeof(CharDriverState));
1260
    if (!chr)
1261
        return NULL;
1262
    s = qemu_mallocz(sizeof(FDCharDriver));
1263
    if (!s) {
1264
        free(chr);
1265
        return NULL;
1266
    }
1267
    s->fd_in = fd_in;
1268
    s->fd_out = fd_out;
1269
    chr->opaque = s;
1270
    chr->chr_write = fd_chr_write;
1271
    chr->chr_add_read_handler = fd_chr_add_read_handler;
1272
    return chr;
1273
}
1274

    
1275
CharDriverState *qemu_chr_open_file_out(const char *file_out)
1276
{
1277
    int fd_out;
1278

    
1279
    fd_out = open(file_out, O_WRONLY | O_TRUNC | O_CREAT | O_BINARY, 0666);
1280
    if (fd_out < 0)
1281
        return NULL;
1282
    return qemu_chr_open_fd(-1, fd_out);
1283
}
1284

    
1285
CharDriverState *qemu_chr_open_pipe(const char *filename)
1286
{
1287
    int fd;
1288

    
1289
    fd = open(filename, O_RDWR | O_BINARY);
1290
    if (fd < 0)
1291
        return NULL;
1292
    return qemu_chr_open_fd(fd, fd);
1293
}
1294

    
1295

    
1296
/* for STDIO, we handle the case where several clients use it
1297
   (nographic mode) */
1298

    
1299
#define TERM_ESCAPE 0x01 /* ctrl-a is used for escape */
1300

    
1301
#define TERM_FIFO_MAX_SIZE 1
1302

    
1303
static int term_got_escape, client_index;
1304
static uint8_t term_fifo[TERM_FIFO_MAX_SIZE];
1305
static int term_fifo_size;
1306
static int term_timestamps;
1307
static int64_t term_timestamps_start;
1308

    
1309
void term_print_help(void)
1310
{
1311
    printf("\n"
1312
           "C-a h    print this help\n"
1313
           "C-a x    exit emulator\n"
1314
           "C-a s    save disk data back to file (if -snapshot)\n"
1315
           "C-a b    send break (magic sysrq)\n"
1316
           "C-a t    toggle console timestamps\n"
1317
           "C-a c    switch between console and monitor\n"
1318
           "C-a C-a  send C-a\n"
1319
           );
1320
}
1321

    
1322
/* called when a char is received */
1323
static void stdio_received_byte(int ch)
1324
{
1325
    if (term_got_escape) {
1326
        term_got_escape = 0;
1327
        switch(ch) {
1328
        case 'h':
1329
            term_print_help();
1330
            break;
1331
        case 'x':
1332
            exit(0);
1333
            break;
1334
        case 's': 
1335
            {
1336
                int i;
1337
                for (i = 0; i < MAX_DISKS; i++) {
1338
                    if (bs_table[i])
1339
                        bdrv_commit(bs_table[i]);
1340
                }
1341
            }
1342
            break;
1343
        case 'b':
1344
            if (client_index < stdio_nb_clients) {
1345
                CharDriverState *chr;
1346
                FDCharDriver *s;
1347

    
1348
                chr = stdio_clients[client_index];
1349
                s = chr->opaque;
1350
                chr->chr_event(s->fd_opaque, CHR_EVENT_BREAK);
1351
            }
1352
            break;
1353
        case 'c':
1354
            client_index++;
1355
            if (client_index >= stdio_nb_clients)
1356
                client_index = 0;
1357
            if (client_index == 0) {
1358
                /* send a new line in the monitor to get the prompt */
1359
                ch = '\r';
1360
                goto send_char;
1361
            }
1362
            break;
1363
        case 't':
1364
            term_timestamps = !term_timestamps;
1365
            term_timestamps_start = -1;
1366
            break;
1367
        case TERM_ESCAPE:
1368
            goto send_char;
1369
        }
1370
    } else if (ch == TERM_ESCAPE) {
1371
        term_got_escape = 1;
1372
    } else {
1373
    send_char:
1374
        if (client_index < stdio_nb_clients) {
1375
            uint8_t buf[1];
1376
            CharDriverState *chr;
1377
            FDCharDriver *s;
1378
            
1379
            chr = stdio_clients[client_index];
1380
            s = chr->opaque;
1381
            if (s->fd_can_read(s->fd_opaque) > 0) {
1382
                buf[0] = ch;
1383
                s->fd_read(s->fd_opaque, buf, 1);
1384
            } else if (term_fifo_size == 0) {
1385
                term_fifo[term_fifo_size++] = ch;
1386
            }
1387
        }
1388
    }
1389
}
1390

    
1391
static int stdio_read_poll(void *opaque)
1392
{
1393
    CharDriverState *chr;
1394
    FDCharDriver *s;
1395

    
1396
    if (client_index < stdio_nb_clients) {
1397
        chr = stdio_clients[client_index];
1398
        s = chr->opaque;
1399
        /* try to flush the queue if needed */
1400
        if (term_fifo_size != 0 && s->fd_can_read(s->fd_opaque) > 0) {
1401
            s->fd_read(s->fd_opaque, term_fifo, 1);
1402
            term_fifo_size = 0;
1403
        }
1404
        /* see if we can absorb more chars */
1405
        if (term_fifo_size == 0)
1406
            return 1;
1407
        else
1408
            return 0;
1409
    } else {
1410
        return 1;
1411
    }
1412
}
1413

    
1414
static void stdio_read(void *opaque)
1415
{
1416
    int size;
1417
    uint8_t buf[1];
1418
    
1419
    size = read(0, buf, 1);
1420
    if (size > 0)
1421
        stdio_received_byte(buf[0]);
1422
}
1423

    
1424
static int stdio_write(CharDriverState *chr, const uint8_t *buf, int len)
1425
{
1426
    FDCharDriver *s = chr->opaque;
1427
    if (!term_timestamps) {
1428
        return unix_write(s->fd_out, buf, len);
1429
    } else {
1430
        int i;
1431
        char buf1[64];
1432

    
1433
        for(i = 0; i < len; i++) {
1434
            unix_write(s->fd_out, buf + i, 1);
1435
            if (buf[i] == '\n') {
1436
                int64_t ti;
1437
                int secs;
1438

    
1439
                ti = get_clock();
1440
                if (term_timestamps_start == -1)
1441
                    term_timestamps_start = ti;
1442
                ti -= term_timestamps_start;
1443
                secs = ti / 1000000000;
1444
                snprintf(buf1, sizeof(buf1), 
1445
                         "[%02d:%02d:%02d.%03d] ",
1446
                         secs / 3600,
1447
                         (secs / 60) % 60,
1448
                         secs % 60,
1449
                         (int)((ti / 1000000) % 1000));
1450
                unix_write(s->fd_out, buf1, strlen(buf1));
1451
            }
1452
        }
1453
        return len;
1454
    }
1455
}
1456

    
1457
/* init terminal so that we can grab keys */
1458
static struct termios oldtty;
1459
static int old_fd0_flags;
1460

    
1461
static void term_exit(void)
1462
{
1463
    tcsetattr (0, TCSANOW, &oldtty);
1464
    fcntl(0, F_SETFL, old_fd0_flags);
1465
}
1466

    
1467
static void term_init(void)
1468
{
1469
    struct termios tty;
1470

    
1471
    tcgetattr (0, &tty);
1472
    oldtty = tty;
1473
    old_fd0_flags = fcntl(0, F_GETFL);
1474

    
1475
    tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
1476
                          |INLCR|IGNCR|ICRNL|IXON);
1477
    tty.c_oflag |= OPOST;
1478
    tty.c_lflag &= ~(ECHO|ECHONL|ICANON|IEXTEN);
1479
    /* if graphical mode, we allow Ctrl-C handling */
1480
    if (nographic)
1481
        tty.c_lflag &= ~ISIG;
1482
    tty.c_cflag &= ~(CSIZE|PARENB);
1483
    tty.c_cflag |= CS8;
1484
    tty.c_cc[VMIN] = 1;
1485
    tty.c_cc[VTIME] = 0;
1486
    
1487
    tcsetattr (0, TCSANOW, &tty);
1488

    
1489
    atexit(term_exit);
1490

    
1491
    fcntl(0, F_SETFL, O_NONBLOCK);
1492
}
1493

    
1494
CharDriverState *qemu_chr_open_stdio(void)
1495
{
1496
    CharDriverState *chr;
1497

    
1498
    if (nographic) {
1499
        if (stdio_nb_clients >= STDIO_MAX_CLIENTS)
1500
            return NULL;
1501
        chr = qemu_chr_open_fd(0, 1);
1502
        chr->chr_write = stdio_write;
1503
        if (stdio_nb_clients == 0)
1504
            qemu_set_fd_handler2(0, stdio_read_poll, stdio_read, NULL, NULL);
1505
        client_index = stdio_nb_clients;
1506
    } else {
1507
        if (stdio_nb_clients != 0)
1508
            return NULL;
1509
        chr = qemu_chr_open_fd(0, 1);
1510
    }
1511
    stdio_clients[stdio_nb_clients++] = chr;
1512
    if (stdio_nb_clients == 1) {
1513
        /* set the terminal in raw mode */
1514
        term_init();
1515
    }
1516
    return chr;
1517
}
1518

    
1519
#if defined(__linux__)
1520
CharDriverState *qemu_chr_open_pty(void)
1521
{
1522
    struct termios tty;
1523
    char slave_name[1024];
1524
    int master_fd, slave_fd;
1525
    
1526
    /* Not satisfying */
1527
    if (openpty(&master_fd, &slave_fd, slave_name, NULL, NULL) < 0) {
1528
        return NULL;
1529
    }
1530
    
1531
    /* Disabling local echo and line-buffered output */
1532
    tcgetattr (master_fd, &tty);
1533
    tty.c_lflag &= ~(ECHO|ICANON|ISIG);
1534
    tty.c_cc[VMIN] = 1;
1535
    tty.c_cc[VTIME] = 0;
1536
    tcsetattr (master_fd, TCSAFLUSH, &tty);
1537

    
1538
    fprintf(stderr, "char device redirected to %s\n", slave_name);
1539
    return qemu_chr_open_fd(master_fd, master_fd);
1540
}
1541

    
1542
static void tty_serial_init(int fd, int speed, 
1543
                            int parity, int data_bits, int stop_bits)
1544
{
1545
    struct termios tty;
1546
    speed_t spd;
1547

    
1548
#if 0
1549
    printf("tty_serial_init: speed=%d parity=%c data=%d stop=%d\n", 
1550
           speed, parity, data_bits, stop_bits);
1551
#endif
1552
    tcgetattr (fd, &tty);
1553

    
1554
    switch(speed) {
1555
    case 50:
1556
        spd = B50;
1557
        break;
1558
    case 75:
1559
        spd = B75;
1560
        break;
1561
    case 300:
1562
        spd = B300;
1563
        break;
1564
    case 600:
1565
        spd = B600;
1566
        break;
1567
    case 1200:
1568
        spd = B1200;
1569
        break;
1570
    case 2400:
1571
        spd = B2400;
1572
        break;
1573
    case 4800:
1574
        spd = B4800;
1575
        break;
1576
    case 9600:
1577
        spd = B9600;
1578
        break;
1579
    case 19200:
1580
        spd = B19200;
1581
        break;
1582
    case 38400:
1583
        spd = B38400;
1584
        break;
1585
    case 57600:
1586
        spd = B57600;
1587
        break;
1588
    default:
1589
    case 115200:
1590
        spd = B115200;
1591
        break;
1592
    }
1593

    
1594
    cfsetispeed(&tty, spd);
1595
    cfsetospeed(&tty, spd);
1596

    
1597
    tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
1598
                          |INLCR|IGNCR|ICRNL|IXON);
1599
    tty.c_oflag |= OPOST;
1600
    tty.c_lflag &= ~(ECHO|ECHONL|ICANON|IEXTEN|ISIG);
1601
    tty.c_cflag &= ~(CSIZE|PARENB|PARODD|CRTSCTS);
1602
    switch(data_bits) {
1603
    default:
1604
    case 8:
1605
        tty.c_cflag |= CS8;
1606
        break;
1607
    case 7:
1608
        tty.c_cflag |= CS7;
1609
        break;
1610
    case 6:
1611
        tty.c_cflag |= CS6;
1612
        break;
1613
    case 5:
1614
        tty.c_cflag |= CS5;
1615
        break;
1616
    }
1617
    switch(parity) {
1618
    default:
1619
    case 'N':
1620
        break;
1621
    case 'E':
1622
        tty.c_cflag |= PARENB;
1623
        break;
1624
    case 'O':
1625
        tty.c_cflag |= PARENB | PARODD;
1626
        break;
1627
    }
1628
    
1629
    tcsetattr (fd, TCSANOW, &tty);
1630
}
1631

    
1632
static int tty_serial_ioctl(CharDriverState *chr, int cmd, void *arg)
1633
{
1634
    FDCharDriver *s = chr->opaque;
1635
    
1636
    switch(cmd) {
1637
    case CHR_IOCTL_SERIAL_SET_PARAMS:
1638
        {
1639
            QEMUSerialSetParams *ssp = arg;
1640
            tty_serial_init(s->fd_in, ssp->speed, ssp->parity, 
1641
                            ssp->data_bits, ssp->stop_bits);
1642
        }
1643
        break;
1644
    case CHR_IOCTL_SERIAL_SET_BREAK:
1645
        {
1646
            int enable = *(int *)arg;
1647
            if (enable)
1648
                tcsendbreak(s->fd_in, 1);
1649
        }
1650
        break;
1651
    default:
1652
        return -ENOTSUP;
1653
    }
1654
    return 0;
1655
}
1656

    
1657
CharDriverState *qemu_chr_open_tty(const char *filename)
1658
{
1659
    CharDriverState *chr;
1660
    int fd;
1661

    
1662
    fd = open(filename, O_RDWR | O_NONBLOCK);
1663
    if (fd < 0)
1664
        return NULL;
1665
    fcntl(fd, F_SETFL, O_NONBLOCK);
1666
    tty_serial_init(fd, 115200, 'N', 8, 1);
1667
    chr = qemu_chr_open_fd(fd, fd);
1668
    if (!chr)
1669
        return NULL;
1670
    chr->chr_ioctl = tty_serial_ioctl;
1671
    return chr;
1672
}
1673

    
1674
static int pp_ioctl(CharDriverState *chr, int cmd, void *arg)
1675
{
1676
    int fd = (int)chr->opaque;
1677
    uint8_t b;
1678

    
1679
    switch(cmd) {
1680
    case CHR_IOCTL_PP_READ_DATA:
1681
        if (ioctl(fd, PPRDATA, &b) < 0)
1682
            return -ENOTSUP;
1683
        *(uint8_t *)arg = b;
1684
        break;
1685
    case CHR_IOCTL_PP_WRITE_DATA:
1686
        b = *(uint8_t *)arg;
1687
        if (ioctl(fd, PPWDATA, &b) < 0)
1688
            return -ENOTSUP;
1689
        break;
1690
    case CHR_IOCTL_PP_READ_CONTROL:
1691
        if (ioctl(fd, PPRCONTROL, &b) < 0)
1692
            return -ENOTSUP;
1693
        *(uint8_t *)arg = b;
1694
        break;
1695
    case CHR_IOCTL_PP_WRITE_CONTROL:
1696
        b = *(uint8_t *)arg;
1697
        if (ioctl(fd, PPWCONTROL, &b) < 0)
1698
            return -ENOTSUP;
1699
        break;
1700
    case CHR_IOCTL_PP_READ_STATUS:
1701
        if (ioctl(fd, PPRSTATUS, &b) < 0)
1702
            return -ENOTSUP;
1703
        *(uint8_t *)arg = b;
1704
        break;
1705
    default:
1706
        return -ENOTSUP;
1707
    }
1708
    return 0;
1709
}
1710

    
1711
CharDriverState *qemu_chr_open_pp(const char *filename)
1712
{
1713
    CharDriverState *chr;
1714
    int fd;
1715

    
1716
    fd = open(filename, O_RDWR);
1717
    if (fd < 0)
1718
        return NULL;
1719

    
1720
    if (ioctl(fd, PPCLAIM) < 0) {
1721
        close(fd);
1722
        return NULL;
1723
    }
1724

    
1725
    chr = qemu_mallocz(sizeof(CharDriverState));
1726
    if (!chr) {
1727
        close(fd);
1728
        return NULL;
1729
    }
1730
    chr->opaque = (void *)fd;
1731
    chr->chr_write = null_chr_write;
1732
    chr->chr_add_read_handler = null_chr_add_read_handler;
1733
    chr->chr_ioctl = pp_ioctl;
1734
    return chr;
1735
}
1736

    
1737
#else
1738
CharDriverState *qemu_chr_open_pty(void)
1739
{
1740
    return NULL;
1741
}
1742
#endif
1743

    
1744
#endif /* !defined(_WIN32) */
1745

    
1746
#ifdef _WIN32
1747
typedef struct {
1748
    IOCanRWHandler *fd_can_read; 
1749
    IOReadHandler *fd_read;
1750
    void *win_opaque;
1751
    int max_size;
1752
    HANDLE hcom, hrecv, hsend;
1753
    OVERLAPPED orecv, osend;
1754
    BOOL fpipe;
1755
    DWORD len;
1756
} WinCharState;
1757

    
1758
#define NSENDBUF 2048
1759
#define NRECVBUF 2048
1760
#define MAXCONNECT 1
1761
#define NTIMEOUT 5000
1762

    
1763
static int win_chr_poll(void *opaque);
1764
static int win_chr_pipe_poll(void *opaque);
1765

    
1766
static void win_chr_close2(WinCharState *s)
1767
{
1768
    if (s->hsend) {
1769
        CloseHandle(s->hsend);
1770
        s->hsend = NULL;
1771
    }
1772
    if (s->hrecv) {
1773
        CloseHandle(s->hrecv);
1774
        s->hrecv = NULL;
1775
    }
1776
    if (s->hcom) {
1777
        CloseHandle(s->hcom);
1778
        s->hcom = NULL;
1779
    }
1780
    if (s->fpipe)
1781
        qemu_del_polling_cb(win_chr_pipe_poll, s);
1782
    else
1783
        qemu_del_polling_cb(win_chr_poll, s);
1784
}
1785

    
1786
static void win_chr_close(CharDriverState *chr)
1787
{
1788
    WinCharState *s = chr->opaque;
1789
    win_chr_close2(s);
1790
}
1791

    
1792
static int win_chr_init(WinCharState *s, const char *filename)
1793
{
1794
    COMMCONFIG comcfg;
1795
    COMMTIMEOUTS cto = { 0, 0, 0, 0, 0};
1796
    COMSTAT comstat;
1797
    DWORD size;
1798
    DWORD err;
1799
    
1800
    s->hsend = CreateEvent(NULL, TRUE, FALSE, NULL);
1801
    if (!s->hsend) {
1802
        fprintf(stderr, "Failed CreateEvent\n");
1803
        goto fail;
1804
    }
1805
    s->hrecv = CreateEvent(NULL, TRUE, FALSE, NULL);
1806
    if (!s->hrecv) {
1807
        fprintf(stderr, "Failed CreateEvent\n");
1808
        goto fail;
1809
    }
1810

    
1811
    s->hcom = CreateFile(filename, GENERIC_READ|GENERIC_WRITE, 0, NULL,
1812
                      OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
1813
    if (s->hcom == INVALID_HANDLE_VALUE) {
1814
        fprintf(stderr, "Failed CreateFile (%lu)\n", GetLastError());
1815
        s->hcom = NULL;
1816
        goto fail;
1817
    }
1818
    
1819
    if (!SetupComm(s->hcom, NRECVBUF, NSENDBUF)) {
1820
        fprintf(stderr, "Failed SetupComm\n");
1821
        goto fail;
1822
    }
1823
    
1824
    ZeroMemory(&comcfg, sizeof(COMMCONFIG));
1825
    size = sizeof(COMMCONFIG);
1826
    GetDefaultCommConfig(filename, &comcfg, &size);
1827
    comcfg.dcb.DCBlength = sizeof(DCB);
1828
    CommConfigDialog(filename, NULL, &comcfg);
1829

    
1830
    if (!SetCommState(s->hcom, &comcfg.dcb)) {
1831
        fprintf(stderr, "Failed SetCommState\n");
1832
        goto fail;
1833
    }
1834

    
1835
    if (!SetCommMask(s->hcom, EV_ERR)) {
1836
        fprintf(stderr, "Failed SetCommMask\n");
1837
        goto fail;
1838
    }
1839

    
1840
    cto.ReadIntervalTimeout = MAXDWORD;
1841
    if (!SetCommTimeouts(s->hcom, &cto)) {
1842
        fprintf(stderr, "Failed SetCommTimeouts\n");
1843
        goto fail;
1844
    }
1845
    
1846
    if (!ClearCommError(s->hcom, &err, &comstat)) {
1847
        fprintf(stderr, "Failed ClearCommError\n");
1848
        goto fail;
1849
    }
1850
    qemu_add_polling_cb(win_chr_poll, s);
1851
    return 0;
1852

    
1853
 fail:
1854
    win_chr_close2(s);
1855
    return -1;
1856
}
1857

    
1858
static int win_chr_write(CharDriverState *chr, const uint8_t *buf, int len1)
1859
{
1860
    WinCharState *s = chr->opaque;
1861
    DWORD len, ret, size, err;
1862

    
1863
    len = len1;
1864
    ZeroMemory(&s->osend, sizeof(s->osend));
1865
    s->osend.hEvent = s->hsend;
1866
    while (len > 0) {
1867
        if (s->hsend)
1868
            ret = WriteFile(s->hcom, buf, len, &size, &s->osend);
1869
        else
1870
            ret = WriteFile(s->hcom, buf, len, &size, NULL);
1871
        if (!ret) {
1872
            err = GetLastError();
1873
            if (err == ERROR_IO_PENDING) {
1874
                ret = GetOverlappedResult(s->hcom, &s->osend, &size, TRUE);
1875
                if (ret) {
1876
                    buf += size;
1877
                    len -= size;
1878
                } else {
1879
                    break;
1880
                }
1881
            } else {
1882
                break;
1883
            }
1884
        } else {
1885
            buf += size;
1886
            len -= size;
1887
        }
1888
    }
1889
    return len1 - len;
1890
}
1891

    
1892
static int win_chr_read_poll(WinCharState *s)
1893
{
1894
    s->max_size = s->fd_can_read(s->win_opaque);
1895
    return s->max_size;
1896
}
1897
            
1898
static void win_chr_readfile(WinCharState *s)
1899
{
1900
    int ret, err;
1901
    uint8_t buf[1024];
1902
    DWORD size;
1903
    
1904
    ZeroMemory(&s->orecv, sizeof(s->orecv));
1905
    s->orecv.hEvent = s->hrecv;
1906
    ret = ReadFile(s->hcom, buf, s->len, &size, &s->orecv);
1907
    if (!ret) {
1908
        err = GetLastError();
1909
        if (err == ERROR_IO_PENDING) {
1910
            ret = GetOverlappedResult(s->hcom, &s->orecv, &size, TRUE);
1911
        }
1912
    }
1913

    
1914
    if (size > 0) {
1915
        s->fd_read(s->win_opaque, buf, size);
1916
    }
1917
}
1918

    
1919
static void win_chr_read(WinCharState *s)
1920
{
1921
    if (s->len > s->max_size)
1922
        s->len = s->max_size;
1923
    if (s->len == 0)
1924
        return;
1925
    
1926
    win_chr_readfile(s);
1927
}
1928

    
1929
static int win_chr_poll(void *opaque)
1930
{
1931
    WinCharState *s = opaque;
1932
    COMSTAT status;
1933
    DWORD comerr;
1934
    
1935
    ClearCommError(s->hcom, &comerr, &status);
1936
    if (status.cbInQue > 0) {
1937
        s->len = status.cbInQue;
1938
        win_chr_read_poll(s);
1939
        win_chr_read(s);
1940
        return 1;
1941
    }
1942
    return 0;
1943
}
1944

    
1945
static void win_chr_add_read_handler(CharDriverState *chr, 
1946
                                    IOCanRWHandler *fd_can_read, 
1947
                                    IOReadHandler *fd_read, void *opaque)
1948
{
1949
    WinCharState *s = chr->opaque;
1950

    
1951
    s->fd_can_read = fd_can_read;
1952
    s->fd_read = fd_read;
1953
    s->win_opaque = opaque;
1954
}
1955

    
1956
CharDriverState *qemu_chr_open_win(const char *filename)
1957
{
1958
    CharDriverState *chr;
1959
    WinCharState *s;
1960
    
1961
    chr = qemu_mallocz(sizeof(CharDriverState));
1962
    if (!chr)
1963
        return NULL;
1964
    s = qemu_mallocz(sizeof(WinCharState));
1965
    if (!s) {
1966
        free(chr);
1967
        return NULL;
1968
    }
1969
    chr->opaque = s;
1970
    chr->chr_write = win_chr_write;
1971
    chr->chr_add_read_handler = win_chr_add_read_handler;
1972
    chr->chr_close = win_chr_close;
1973

    
1974
    if (win_chr_init(s, filename) < 0) {
1975
        free(s);
1976
        free(chr);
1977
        return NULL;
1978
    }
1979
    return chr;
1980
}
1981

    
1982
static int win_chr_pipe_poll(void *opaque)
1983
{
1984
    WinCharState *s = opaque;
1985
    DWORD size;
1986

    
1987
    PeekNamedPipe(s->hcom, NULL, 0, NULL, &size, NULL);
1988
    if (size > 0) {
1989
        s->len = size;
1990
        win_chr_read_poll(s);
1991
        win_chr_read(s);
1992
        return 1;
1993
    }
1994
    return 0;
1995
}
1996

    
1997
static int win_chr_pipe_init(WinCharState *s, const char *filename)
1998
{
1999
    OVERLAPPED ov;
2000
    int ret;
2001
    DWORD size;
2002
    char openname[256];
2003
    
2004
    s->fpipe = TRUE;
2005

    
2006
    s->hsend = CreateEvent(NULL, TRUE, FALSE, NULL);
2007
    if (!s->hsend) {
2008
        fprintf(stderr, "Failed CreateEvent\n");
2009
        goto fail;
2010
    }
2011
    s->hrecv = CreateEvent(NULL, TRUE, FALSE, NULL);
2012
    if (!s->hrecv) {
2013
        fprintf(stderr, "Failed CreateEvent\n");
2014
        goto fail;
2015
    }
2016
    
2017
    snprintf(openname, sizeof(openname), "\\\\.\\pipe\\%s", filename);
2018
    s->hcom = CreateNamedPipe(openname, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
2019
                              PIPE_TYPE_BYTE | PIPE_READMODE_BYTE |
2020
                              PIPE_WAIT,
2021
                              MAXCONNECT, NSENDBUF, NRECVBUF, NTIMEOUT, NULL);
2022
    if (s->hcom == INVALID_HANDLE_VALUE) {
2023
        fprintf(stderr, "Failed CreateNamedPipe (%lu)\n", GetLastError());
2024
        s->hcom = NULL;
2025
        goto fail;
2026
    }
2027

    
2028
    ZeroMemory(&ov, sizeof(ov));
2029
    ov.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
2030
    ret = ConnectNamedPipe(s->hcom, &ov);
2031
    if (ret) {
2032
        fprintf(stderr, "Failed ConnectNamedPipe\n");
2033
        goto fail;
2034
    }
2035

    
2036
    ret = GetOverlappedResult(s->hcom, &ov, &size, TRUE);
2037
    if (!ret) {
2038
        fprintf(stderr, "Failed GetOverlappedResult\n");
2039
        if (ov.hEvent) {
2040
            CloseHandle(ov.hEvent);
2041
            ov.hEvent = NULL;
2042
        }
2043
        goto fail;
2044
    }
2045

    
2046
    if (ov.hEvent) {
2047
        CloseHandle(ov.hEvent);
2048
        ov.hEvent = NULL;
2049
    }
2050
    qemu_add_polling_cb(win_chr_pipe_poll, s);
2051
    return 0;
2052

    
2053
 fail:
2054
    win_chr_close2(s);
2055
    return -1;
2056
}
2057

    
2058

    
2059
CharDriverState *qemu_chr_open_win_pipe(const char *filename)
2060
{
2061
    CharDriverState *chr;
2062
    WinCharState *s;
2063

    
2064
    chr = qemu_mallocz(sizeof(CharDriverState));
2065
    if (!chr)
2066
        return NULL;
2067
    s = qemu_mallocz(sizeof(WinCharState));
2068
    if (!s) {
2069
        free(chr);
2070
        return NULL;
2071
    }
2072
    chr->opaque = s;
2073
    chr->chr_write = win_chr_write;
2074
    chr->chr_add_read_handler = win_chr_add_read_handler;
2075
    chr->chr_close = win_chr_close;
2076
    
2077
    if (win_chr_pipe_init(s, filename) < 0) {
2078
        free(s);
2079
        free(chr);
2080
        return NULL;
2081
    }
2082
    return chr;
2083
}
2084

    
2085
CharDriverState *qemu_chr_open_win_file(HANDLE fd_out)
2086
{
2087
    CharDriverState *chr;
2088
    WinCharState *s;
2089

    
2090
    chr = qemu_mallocz(sizeof(CharDriverState));
2091
    if (!chr)
2092
        return NULL;
2093
    s = qemu_mallocz(sizeof(WinCharState));
2094
    if (!s) {
2095
        free(chr);
2096
        return NULL;
2097
    }
2098
    s->hcom = fd_out;
2099
    chr->opaque = s;
2100
    chr->chr_write = win_chr_write;
2101
    chr->chr_add_read_handler = win_chr_add_read_handler;
2102
    return chr;
2103
}
2104
    
2105
CharDriverState *qemu_chr_open_win_file_out(const char *file_out)
2106
{
2107
    HANDLE fd_out;
2108
    
2109
    fd_out = CreateFile(file_out, GENERIC_WRITE, FILE_SHARE_READ, NULL,
2110
                        OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
2111
    if (fd_out == INVALID_HANDLE_VALUE)
2112
        return NULL;
2113

    
2114
    return qemu_chr_open_win_file(fd_out);
2115
}
2116
#endif
2117

    
2118
/***********************************************************/
2119
/* UDP Net console */
2120

    
2121
typedef struct {
2122
    IOCanRWHandler *fd_can_read;
2123
    IOReadHandler *fd_read;
2124
    void *fd_opaque;
2125
    int fd;
2126
    struct sockaddr_in daddr;
2127
    char buf[1024];
2128
    int bufcnt;
2129
    int bufptr;
2130
    int max_size;
2131
} NetCharDriver;
2132

    
2133
static int udp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
2134
{
2135
    NetCharDriver *s = chr->opaque;
2136

    
2137
    return sendto(s->fd, buf, len, 0,
2138
                  (struct sockaddr *)&s->daddr, sizeof(struct sockaddr_in));
2139
}
2140

    
2141
static int udp_chr_read_poll(void *opaque)
2142
{
2143
    CharDriverState *chr = opaque;
2144
    NetCharDriver *s = chr->opaque;
2145

    
2146
    s->max_size = s->fd_can_read(s->fd_opaque);
2147

    
2148
    /* If there were any stray characters in the queue process them
2149
     * first
2150
     */
2151
    while (s->max_size > 0 && s->bufptr < s->bufcnt) {
2152
        s->fd_read(s->fd_opaque, &s->buf[s->bufptr], 1);
2153
        s->bufptr++;
2154
        s->max_size = s->fd_can_read(s->fd_opaque);
2155
    }
2156
    return s->max_size;
2157
}
2158

    
2159
static void udp_chr_read(void *opaque)
2160
{
2161
    CharDriverState *chr = opaque;
2162
    NetCharDriver *s = chr->opaque;
2163

    
2164
    if (s->max_size == 0)
2165
        return;
2166
    s->bufcnt = recv(s->fd, s->buf, sizeof(s->buf), 0);
2167
    s->bufptr = s->bufcnt;
2168
    if (s->bufcnt <= 0)
2169
        return;
2170

    
2171
    s->bufptr = 0;
2172
    while (s->max_size > 0 && s->bufptr < s->bufcnt) {
2173
        s->fd_read(s->fd_opaque, &s->buf[s->bufptr], 1);
2174
        s->bufptr++;
2175
        s->max_size = s->fd_can_read(s->fd_opaque);
2176
    }
2177
}
2178

    
2179
static void udp_chr_add_read_handler(CharDriverState *chr,
2180
                                    IOCanRWHandler *fd_can_read,
2181
                                    IOReadHandler *fd_read, void *opaque)
2182
{
2183
    NetCharDriver *s = chr->opaque;
2184

    
2185
    if (s->fd >= 0) {
2186
        s->fd_can_read = fd_can_read;
2187
        s->fd_read = fd_read;
2188
        s->fd_opaque = opaque;
2189
        qemu_set_fd_handler2(s->fd, udp_chr_read_poll,
2190
                             udp_chr_read, NULL, chr);
2191
    }
2192
}
2193

    
2194
int parse_host_port(struct sockaddr_in *saddr, const char *str);
2195
int parse_host_src_port(struct sockaddr_in *haddr,
2196
                        struct sockaddr_in *saddr,
2197
                        const char *str);
2198

    
2199
CharDriverState *qemu_chr_open_udp(const char *def)
2200
{
2201
    CharDriverState *chr = NULL;
2202
    NetCharDriver *s = NULL;
2203
    int fd = -1;
2204
    struct sockaddr_in saddr;
2205

    
2206
    chr = qemu_mallocz(sizeof(CharDriverState));
2207
    if (!chr)
2208
        goto return_err;
2209
    s = qemu_mallocz(sizeof(NetCharDriver));
2210
    if (!s)
2211
        goto return_err;
2212

    
2213
    fd = socket(PF_INET, SOCK_DGRAM, 0);
2214
    if (fd < 0) {
2215
        perror("socket(PF_INET, SOCK_DGRAM)");
2216
        goto return_err;
2217
    }
2218

    
2219
    if (parse_host_src_port(&s->daddr, &saddr, def) < 0) {
2220
        printf("Could not parse: %s\n", def);
2221
        goto return_err;
2222
    }
2223

    
2224
    if (bind(fd, (struct sockaddr *)&saddr, sizeof(saddr)) < 0)
2225
    {
2226
        perror("bind");
2227
        goto return_err;
2228
    }
2229

    
2230
    s->fd = fd;
2231
    s->bufcnt = 0;
2232
    s->bufptr = 0;
2233
    chr->opaque = s;
2234
    chr->chr_write = udp_chr_write;
2235
    chr->chr_add_read_handler = udp_chr_add_read_handler;
2236
    return chr;
2237

    
2238
return_err:
2239
    if (chr)
2240
        free(chr);
2241
    if (s)
2242
        free(s);
2243
    if (fd >= 0)
2244
        closesocket(fd);
2245
    return NULL;
2246
}
2247

    
2248
/***********************************************************/
2249
/* TCP Net console */
2250

    
2251
typedef struct {
2252
    IOCanRWHandler *fd_can_read;
2253
    IOReadHandler *fd_read;
2254
    void *fd_opaque;
2255
    int fd, listen_fd;
2256
    int connected;
2257
    int max_size;
2258
    int do_telnetopt;
2259
} TCPCharDriver;
2260

    
2261
static void tcp_chr_accept(void *opaque);
2262

    
2263
static int tcp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
2264
{
2265
    TCPCharDriver *s = chr->opaque;
2266
    if (s->connected) {
2267
        return send_all(s->fd, buf, len);
2268
    } else {
2269
        /* XXX: indicate an error ? */
2270
        return len;
2271
    }
2272
}
2273

    
2274
static int tcp_chr_read_poll(void *opaque)
2275
{
2276
    CharDriverState *chr = opaque;
2277
    TCPCharDriver *s = chr->opaque;
2278
    if (!s->connected)
2279
        return 0;
2280
    s->max_size = s->fd_can_read(s->fd_opaque);
2281
    return s->max_size;
2282
}
2283

    
2284
#define IAC 255
2285
#define IAC_BREAK 243
2286
static void tcp_chr_process_IAC_bytes(CharDriverState *chr,
2287
                                      TCPCharDriver *s,
2288
                                      char *buf, int *size)
2289
{
2290
    /* Handle any telnet client's basic IAC options to satisfy char by
2291
     * char mode with no echo.  All IAC options will be removed from
2292
     * the buf and the do_telnetopt variable will be used to track the
2293
     * state of the width of the IAC information.
2294
     *
2295
     * IAC commands come in sets of 3 bytes with the exception of the
2296
     * "IAC BREAK" command and the double IAC.
2297
     */
2298

    
2299
    int i;
2300
    int j = 0;
2301

    
2302
    for (i = 0; i < *size; i++) {
2303
        if (s->do_telnetopt > 1) {
2304
            if ((unsigned char)buf[i] == IAC && s->do_telnetopt == 2) {
2305
                /* Double IAC means send an IAC */
2306
                if (j != i)
2307
                    buf[j] = buf[i];
2308
                j++;
2309
                s->do_telnetopt = 1;
2310
            } else {
2311
                if ((unsigned char)buf[i] == IAC_BREAK && s->do_telnetopt == 2) {
2312
                    /* Handle IAC break commands by sending a serial break */
2313
                    chr->chr_event(s->fd_opaque, CHR_EVENT_BREAK);
2314
                    s->do_telnetopt++;
2315
                }
2316
                s->do_telnetopt++;
2317
            }
2318
            if (s->do_telnetopt >= 4) {
2319
                s->do_telnetopt = 1;
2320
            }
2321
        } else {
2322
            if ((unsigned char)buf[i] == IAC) {
2323
                s->do_telnetopt = 2;
2324
            } else {
2325
                if (j != i)
2326
                    buf[j] = buf[i];
2327
                j++;
2328
            }
2329
        }
2330
    }
2331
    *size = j;
2332
}
2333

    
2334
static void tcp_chr_read(void *opaque)
2335
{
2336
    CharDriverState *chr = opaque;
2337
    TCPCharDriver *s = chr->opaque;
2338
    uint8_t buf[1024];
2339
    int len, size;
2340

    
2341
    if (!s->connected || s->max_size <= 0)
2342
        return;
2343
    len = sizeof(buf);
2344
    if (len > s->max_size)
2345
        len = s->max_size;
2346
    size = recv(s->fd, buf, len, 0);
2347
    if (size == 0) {
2348
        /* connection closed */
2349
        s->connected = 0;
2350
        if (s->listen_fd >= 0) {
2351
            qemu_set_fd_handler(s->listen_fd, tcp_chr_accept, NULL, chr);
2352
        }
2353
        qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
2354
        closesocket(s->fd);
2355
        s->fd = -1;
2356
    } else if (size > 0) {
2357
        if (s->do_telnetopt)
2358
            tcp_chr_process_IAC_bytes(chr, s, buf, &size);
2359
        if (size > 0)
2360
            s->fd_read(s->fd_opaque, buf, size);
2361
    }
2362
}
2363

    
2364
static void tcp_chr_add_read_handler(CharDriverState *chr,
2365
                                     IOCanRWHandler *fd_can_read,
2366
                                    IOReadHandler *fd_read, void *opaque)
2367
{
2368
    TCPCharDriver *s = chr->opaque;
2369

    
2370
    s->fd_can_read = fd_can_read;
2371
    s->fd_read = fd_read;
2372
    s->fd_opaque = opaque;
2373
}
2374

    
2375
static void tcp_chr_connect(void *opaque)
2376
{
2377
    CharDriverState *chr = opaque;
2378
    TCPCharDriver *s = chr->opaque;
2379

    
2380
    s->connected = 1;
2381
    qemu_set_fd_handler2(s->fd, tcp_chr_read_poll,
2382
                         tcp_chr_read, NULL, chr);
2383
}
2384

    
2385
#define IACSET(x,a,b,c) x[0] = a; x[1] = b; x[2] = c;
2386
static void tcp_chr_telnet_init(int fd)
2387
{
2388
    char buf[3];
2389
    /* Send the telnet negotion to put telnet in binary, no echo, single char mode */
2390
    IACSET(buf, 0xff, 0xfb, 0x01);  /* IAC WILL ECHO */
2391
    send(fd, (char *)buf, 3, 0);
2392
    IACSET(buf, 0xff, 0xfb, 0x03);  /* IAC WILL Suppress go ahead */
2393
    send(fd, (char *)buf, 3, 0);
2394
    IACSET(buf, 0xff, 0xfb, 0x00);  /* IAC WILL Binary */
2395
    send(fd, (char *)buf, 3, 0);
2396
    IACSET(buf, 0xff, 0xfd, 0x00);  /* IAC DO Binary */
2397
    send(fd, (char *)buf, 3, 0);
2398
}
2399

    
2400
static void tcp_chr_accept(void *opaque)
2401
{
2402
    CharDriverState *chr = opaque;
2403
    TCPCharDriver *s = chr->opaque;
2404
    struct sockaddr_in saddr;
2405
    socklen_t len;
2406
    int fd;
2407

    
2408
    for(;;) {
2409
        len = sizeof(saddr);
2410
        fd = accept(s->listen_fd, (struct sockaddr *)&saddr, &len);
2411
        if (fd < 0 && errno != EINTR) {
2412
            return;
2413
        } else if (fd >= 0) {
2414
            if (s->do_telnetopt)
2415
                tcp_chr_telnet_init(fd);
2416
            break;
2417
        }
2418
    }
2419
    socket_set_nonblock(fd);
2420
    s->fd = fd;
2421
    qemu_set_fd_handler(s->listen_fd, NULL, NULL, NULL);
2422
    tcp_chr_connect(chr);
2423
}
2424

    
2425
static void tcp_chr_close(CharDriverState *chr)
2426
{
2427
    TCPCharDriver *s = chr->opaque;
2428
    if (s->fd >= 0)
2429
        closesocket(s->fd);
2430
    if (s->listen_fd >= 0)
2431
        closesocket(s->listen_fd);
2432
    qemu_free(s);
2433
}
2434

    
2435
static CharDriverState *qemu_chr_open_tcp(const char *host_str, 
2436
                                          int is_telnet)
2437
{
2438
    CharDriverState *chr = NULL;
2439
    TCPCharDriver *s = NULL;
2440
    int fd = -1, ret, err, val;
2441
    int is_listen = 0;
2442
    int is_waitconnect = 1;
2443
    const char *ptr;
2444
    struct sockaddr_in saddr;
2445

    
2446
    if (parse_host_port(&saddr, host_str) < 0)
2447
        goto fail;
2448

    
2449
    ptr = host_str;
2450
    while((ptr = strchr(ptr,','))) {
2451
        ptr++;
2452
        if (!strncmp(ptr,"server",6)) {
2453
            is_listen = 1;
2454
        } else if (!strncmp(ptr,"nowait",6)) {
2455
            is_waitconnect = 0;
2456
        } else {
2457
            printf("Unknown option: %s\n", ptr);
2458
            goto fail;
2459
        }
2460
    }
2461
    if (!is_listen)
2462
        is_waitconnect = 0;
2463

    
2464
    chr = qemu_mallocz(sizeof(CharDriverState));
2465
    if (!chr)
2466
        goto fail;
2467
    s = qemu_mallocz(sizeof(TCPCharDriver));
2468
    if (!s)
2469
        goto fail;
2470
    
2471
    fd = socket(PF_INET, SOCK_STREAM, 0);
2472
    if (fd < 0) 
2473
        goto fail;
2474

    
2475
    if (!is_waitconnect)
2476
        socket_set_nonblock(fd);
2477

    
2478
    s->connected = 0;
2479
    s->fd = -1;
2480
    s->listen_fd = -1;
2481
    if (is_listen) {
2482
        /* allow fast reuse */
2483
        val = 1;
2484
        setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const char *)&val, sizeof(val));
2485
        
2486
        ret = bind(fd, (struct sockaddr *)&saddr, sizeof(saddr));
2487
        if (ret < 0) 
2488
            goto fail;
2489
        ret = listen(fd, 0);
2490
        if (ret < 0)
2491
            goto fail;
2492
        s->listen_fd = fd;
2493
        qemu_set_fd_handler(s->listen_fd, tcp_chr_accept, NULL, chr);
2494
        if (is_telnet)
2495
            s->do_telnetopt = 1;
2496
    } else {
2497
        for(;;) {
2498
            ret = connect(fd, (struct sockaddr *)&saddr, sizeof(saddr));
2499
            if (ret < 0) {
2500
                err = socket_error();
2501
                if (err == EINTR || err == EWOULDBLOCK) {
2502
                } else if (err == EINPROGRESS) {
2503
                    break;
2504
                } else {
2505
                    goto fail;
2506
                }
2507
            } else {
2508
                s->connected = 1;
2509
                break;
2510
            }
2511
        }
2512
        s->fd = fd;
2513
        if (s->connected)
2514
            tcp_chr_connect(chr);
2515
        else
2516
            qemu_set_fd_handler(s->fd, NULL, tcp_chr_connect, chr);
2517
    }
2518
    
2519
    chr->opaque = s;
2520
    chr->chr_write = tcp_chr_write;
2521
    chr->chr_add_read_handler = tcp_chr_add_read_handler;
2522
    chr->chr_close = tcp_chr_close;
2523
    if (is_listen && is_waitconnect) {
2524
        printf("QEMU waiting for connection on: %s\n", host_str);
2525
        tcp_chr_accept(chr);
2526
        socket_set_nonblock(s->listen_fd);
2527
    }
2528

    
2529
    return chr;
2530
 fail:
2531
    if (fd >= 0)
2532
        closesocket(fd);
2533
    qemu_free(s);
2534
    qemu_free(chr);
2535
    return NULL;
2536
}
2537

    
2538
CharDriverState *qemu_chr_open(const char *filename)
2539
{
2540
    const char *p;
2541

    
2542
    if (!strcmp(filename, "vc")) {
2543
        return text_console_init(&display_state);
2544
    } else if (!strcmp(filename, "null")) {
2545
        return qemu_chr_open_null();
2546
    } else 
2547
    if (strstart(filename, "tcp:", &p)) {
2548
        return qemu_chr_open_tcp(p, 0);
2549
    } else
2550
    if (strstart(filename, "telnet:", &p)) {
2551
        return qemu_chr_open_tcp(p, 1);
2552
    } else
2553
    if (strstart(filename, "udp:", &p)) {
2554
        return qemu_chr_open_udp(p);
2555
    } else
2556
#ifndef _WIN32
2557
    if (strstart(filename, "file:", &p)) {
2558
        return qemu_chr_open_file_out(p);
2559
    } else if (strstart(filename, "pipe:", &p)) {
2560
        return qemu_chr_open_pipe(p);
2561
    } else if (!strcmp(filename, "pty")) {
2562
        return qemu_chr_open_pty();
2563
    } else if (!strcmp(filename, "stdio")) {
2564
        return qemu_chr_open_stdio();
2565
    } else 
2566
#endif
2567
#if defined(__linux__)
2568
    if (strstart(filename, "/dev/parport", NULL)) {
2569
        return qemu_chr_open_pp(filename);
2570
    } else 
2571
    if (strstart(filename, "/dev/", NULL)) {
2572
        return qemu_chr_open_tty(filename);
2573
    } else 
2574
#endif
2575
#ifdef _WIN32
2576
    if (strstart(filename, "COM", NULL)) {
2577
        return qemu_chr_open_win(filename);
2578
    } else
2579
    if (strstart(filename, "pipe:", &p)) {
2580
        return qemu_chr_open_win_pipe(p);
2581
    } else
2582
    if (strstart(filename, "file:", &p)) {
2583
        return qemu_chr_open_win_file_out(p);
2584
    }
2585
#endif
2586
    {
2587
        return NULL;
2588
    }
2589
}
2590

    
2591
void qemu_chr_close(CharDriverState *chr)
2592
{
2593
    if (chr->chr_close)
2594
        chr->chr_close(chr);
2595
}
2596

    
2597
/***********************************************************/
2598
/* network device redirectors */
2599

    
2600
void hex_dump(FILE *f, const uint8_t *buf, int size)
2601
{
2602
    int len, i, j, c;
2603

    
2604
    for(i=0;i<size;i+=16) {
2605
        len = size - i;
2606
        if (len > 16)
2607
            len = 16;
2608
        fprintf(f, "%08x ", i);
2609
        for(j=0;j<16;j++) {
2610
            if (j < len)
2611
                fprintf(f, " %02x", buf[i+j]);
2612
            else
2613
                fprintf(f, "   ");
2614
        }
2615
        fprintf(f, " ");
2616
        for(j=0;j<len;j++) {
2617
            c = buf[i+j];
2618
            if (c < ' ' || c > '~')
2619
                c = '.';
2620
            fprintf(f, "%c", c);
2621
        }
2622
        fprintf(f, "\n");
2623
    }
2624
}
2625

    
2626
static int parse_macaddr(uint8_t *macaddr, const char *p)
2627
{
2628
    int i;
2629
    for(i = 0; i < 6; i++) {
2630
        macaddr[i] = strtol(p, (char **)&p, 16);
2631
        if (i == 5) {
2632
            if (*p != '\0') 
2633
                return -1;
2634
        } else {
2635
            if (*p != ':') 
2636
                return -1;
2637
            p++;
2638
        }
2639
    }
2640
    return 0;
2641
}
2642

    
2643
static int get_str_sep(char *buf, int buf_size, const char **pp, int sep)
2644
{
2645
    const char *p, *p1;
2646
    int len;
2647
    p = *pp;
2648
    p1 = strchr(p, sep);
2649
    if (!p1)
2650
        return -1;
2651
    len = p1 - p;
2652
    p1++;
2653
    if (buf_size > 0) {
2654
        if (len > buf_size - 1)
2655
            len = buf_size - 1;
2656
        memcpy(buf, p, len);
2657
        buf[len] = '\0';
2658
    }
2659
    *pp = p1;
2660
    return 0;
2661
}
2662

    
2663
int parse_host_src_port(struct sockaddr_in *haddr,
2664
                        struct sockaddr_in *saddr,
2665
                        const char *input_str)
2666
{
2667
    char *str = strdup(input_str);
2668
    char *host_str = str;
2669
    char *src_str;
2670
    char *ptr;
2671

    
2672
    /*
2673
     * Chop off any extra arguments at the end of the string which
2674
     * would start with a comma, then fill in the src port information
2675
     * if it was provided else use the "any address" and "any port".
2676
     */
2677
    if ((ptr = strchr(str,',')))
2678
        *ptr = '\0';
2679

    
2680
    if ((src_str = strchr(input_str,'@'))) {
2681
        *src_str = '\0';
2682
        src_str++;
2683
    }
2684

    
2685
    if (parse_host_port(haddr, host_str) < 0)
2686
        goto fail;
2687

    
2688
    if (!src_str || *src_str == '\0')
2689
        src_str = ":0";
2690

    
2691
    if (parse_host_port(saddr, src_str) < 0)
2692
        goto fail;
2693

    
2694
    free(str);
2695
    return(0);
2696

    
2697
fail:
2698
    free(str);
2699
    return -1;
2700
}
2701

    
2702
int parse_host_port(struct sockaddr_in *saddr, const char *str)
2703
{
2704
    char buf[512];
2705
    struct hostent *he;
2706
    const char *p, *r;
2707
    int port;
2708

    
2709
    p = str;
2710
    if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
2711
        return -1;
2712
    saddr->sin_family = AF_INET;
2713
    if (buf[0] == '\0') {
2714
        saddr->sin_addr.s_addr = 0;
2715
    } else {
2716
        if (isdigit(buf[0])) {
2717
            if (!inet_aton(buf, &saddr->sin_addr))
2718
                return -1;
2719
        } else {
2720
            if ((he = gethostbyname(buf)) == NULL)
2721
                return - 1;
2722
            saddr->sin_addr = *(struct in_addr *)he->h_addr;
2723
        }
2724
    }
2725
    port = strtol(p, (char **)&r, 0);
2726
    if (r == p)
2727
        return -1;
2728
    saddr->sin_port = htons(port);
2729
    return 0;
2730
}
2731

    
2732
/* find or alloc a new VLAN */
2733
VLANState *qemu_find_vlan(int id)
2734
{
2735
    VLANState **pvlan, *vlan;
2736
    for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) {
2737
        if (vlan->id == id)
2738
            return vlan;
2739
    }
2740
    vlan = qemu_mallocz(sizeof(VLANState));
2741
    if (!vlan)
2742
        return NULL;
2743
    vlan->id = id;
2744
    vlan->next = NULL;
2745
    pvlan = &first_vlan;
2746
    while (*pvlan != NULL)
2747
        pvlan = &(*pvlan)->next;
2748
    *pvlan = vlan;
2749
    return vlan;
2750
}
2751

    
2752
VLANClientState *qemu_new_vlan_client(VLANState *vlan,
2753
                                      IOReadHandler *fd_read,
2754
                                      IOCanRWHandler *fd_can_read,
2755
                                      void *opaque)
2756
{
2757
    VLANClientState *vc, **pvc;
2758
    vc = qemu_mallocz(sizeof(VLANClientState));
2759
    if (!vc)
2760
        return NULL;
2761
    vc->fd_read = fd_read;
2762
    vc->fd_can_read = fd_can_read;
2763
    vc->opaque = opaque;
2764
    vc->vlan = vlan;
2765

    
2766
    vc->next = NULL;
2767
    pvc = &vlan->first_client;
2768
    while (*pvc != NULL)
2769
        pvc = &(*pvc)->next;
2770
    *pvc = vc;
2771
    return vc;
2772
}
2773

    
2774
int qemu_can_send_packet(VLANClientState *vc1)
2775
{
2776
    VLANState *vlan = vc1->vlan;
2777
    VLANClientState *vc;
2778

    
2779
    for(vc = vlan->first_client; vc != NULL; vc = vc->next) {
2780
        if (vc != vc1) {
2781
            if (vc->fd_can_read && !vc->fd_can_read(vc->opaque))
2782
                return 0;
2783
        }
2784
    }
2785
    return 1;
2786
}
2787

    
2788
void qemu_send_packet(VLANClientState *vc1, const uint8_t *buf, int size)
2789
{
2790
    VLANState *vlan = vc1->vlan;
2791
    VLANClientState *vc;
2792

    
2793
#if 0
2794
    printf("vlan %d send:\n", vlan->id);
2795
    hex_dump(stdout, buf, size);
2796
#endif
2797
    for(vc = vlan->first_client; vc != NULL; vc = vc->next) {
2798
        if (vc != vc1) {
2799
            vc->fd_read(vc->opaque, buf, size);
2800
        }
2801
    }
2802
}
2803

    
2804
#if defined(CONFIG_SLIRP)
2805

    
2806
/* slirp network adapter */
2807

    
2808
static int slirp_inited;
2809
static VLANClientState *slirp_vc;
2810

    
2811
int slirp_can_output(void)
2812
{
2813
    return !slirp_vc || qemu_can_send_packet(slirp_vc);
2814
}
2815

    
2816
void slirp_output(const uint8_t *pkt, int pkt_len)
2817
{
2818
#if 0
2819
    printf("slirp output:\n");
2820
    hex_dump(stdout, pkt, pkt_len);
2821
#endif
2822
    if (!slirp_vc)
2823
        return;
2824
    qemu_send_packet(slirp_vc, pkt, pkt_len);
2825
}
2826

    
2827
static void slirp_receive(void *opaque, const uint8_t *buf, int size)
2828
{
2829
#if 0
2830
    printf("slirp input:\n");
2831
    hex_dump(stdout, buf, size);
2832
#endif
2833
    slirp_input(buf, size);
2834
}
2835

    
2836
static int net_slirp_init(VLANState *vlan)
2837
{
2838
    if (!slirp_inited) {
2839
        slirp_inited = 1;
2840
        slirp_init();
2841
    }
2842
    slirp_vc = qemu_new_vlan_client(vlan, 
2843
                                    slirp_receive, NULL, NULL);
2844
    snprintf(slirp_vc->info_str, sizeof(slirp_vc->info_str), "user redirector");
2845
    return 0;
2846
}
2847

    
2848
static void net_slirp_redir(const char *redir_str)
2849
{
2850
    int is_udp;
2851
    char buf[256], *r;
2852
    const char *p;
2853
    struct in_addr guest_addr;
2854
    int host_port, guest_port;
2855
    
2856
    if (!slirp_inited) {
2857
        slirp_inited = 1;
2858
        slirp_init();
2859
    }
2860

    
2861
    p = redir_str;
2862
    if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
2863
        goto fail;
2864
    if (!strcmp(buf, "tcp")) {
2865
        is_udp = 0;
2866
    } else if (!strcmp(buf, "udp")) {
2867
        is_udp = 1;
2868
    } else {
2869
        goto fail;
2870
    }
2871

    
2872
    if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
2873
        goto fail;
2874
    host_port = strtol(buf, &r, 0);
2875
    if (r == buf)
2876
        goto fail;
2877

    
2878
    if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
2879
        goto fail;
2880
    if (buf[0] == '\0') {
2881
        pstrcpy(buf, sizeof(buf), "10.0.2.15");
2882
    }
2883
    if (!inet_aton(buf, &guest_addr))
2884
        goto fail;
2885
    
2886
    guest_port = strtol(p, &r, 0);
2887
    if (r == p)
2888
        goto fail;
2889
    
2890
    if (slirp_redir(is_udp, host_port, guest_addr, guest_port) < 0) {
2891
        fprintf(stderr, "qemu: could not set up redirection\n");
2892
        exit(1);
2893
    }
2894
    return;
2895
 fail:
2896
    fprintf(stderr, "qemu: syntax: -redir [tcp|udp]:host-port:[guest-host]:guest-port\n");
2897
    exit(1);
2898
}
2899
    
2900
#ifndef _WIN32
2901

    
2902
char smb_dir[1024];
2903

    
2904
static void smb_exit(void)
2905
{
2906
    DIR *d;
2907
    struct dirent *de;
2908
    char filename[1024];
2909

    
2910
    /* erase all the files in the directory */
2911
    d = opendir(smb_dir);
2912
    for(;;) {
2913
        de = readdir(d);
2914
        if (!de)
2915
            break;
2916
        if (strcmp(de->d_name, ".") != 0 &&
2917
            strcmp(de->d_name, "..") != 0) {
2918
            snprintf(filename, sizeof(filename), "%s/%s", 
2919
                     smb_dir, de->d_name);
2920
            unlink(filename);
2921
        }
2922
    }
2923
    closedir(d);
2924
    rmdir(smb_dir);
2925
}
2926

    
2927
/* automatic user mode samba server configuration */
2928
void net_slirp_smb(const char *exported_dir)
2929
{
2930
    char smb_conf[1024];
2931
    char smb_cmdline[1024];
2932
    FILE *f;
2933

    
2934
    if (!slirp_inited) {
2935
        slirp_inited = 1;
2936
        slirp_init();
2937
    }
2938

    
2939
    /* XXX: better tmp dir construction */
2940
    snprintf(smb_dir, sizeof(smb_dir), "/tmp/qemu-smb.%d", getpid());
2941
    if (mkdir(smb_dir, 0700) < 0) {
2942
        fprintf(stderr, "qemu: could not create samba server dir '%s'\n", smb_dir);
2943
        exit(1);
2944
    }
2945
    snprintf(smb_conf, sizeof(smb_conf), "%s/%s", smb_dir, "smb.conf");
2946
    
2947
    f = fopen(smb_conf, "w");
2948
    if (!f) {
2949
        fprintf(stderr, "qemu: could not create samba server configuration file '%s'\n", smb_conf);
2950
        exit(1);
2951
    }
2952
    fprintf(f, 
2953
            "[global]\n"
2954
            "private dir=%s\n"
2955
            "smb ports=0\n"
2956
            "socket address=127.0.0.1\n"
2957
            "pid directory=%s\n"
2958
            "lock directory=%s\n"
2959
            "log file=%s/log.smbd\n"
2960
            "smb passwd file=%s/smbpasswd\n"
2961
            "security = share\n"
2962
            "[qemu]\n"
2963
            "path=%s\n"
2964
            "read only=no\n"
2965
            "guest ok=yes\n",
2966
            smb_dir,
2967
            smb_dir,
2968
            smb_dir,
2969
            smb_dir,
2970
            smb_dir,
2971
            exported_dir
2972
            );
2973
    fclose(f);
2974
    atexit(smb_exit);
2975

    
2976
    snprintf(smb_cmdline, sizeof(smb_cmdline), "/usr/sbin/smbd -s %s",
2977
             smb_conf);
2978
    
2979
    slirp_add_exec(0, smb_cmdline, 4, 139);
2980
}
2981

    
2982
#endif /* !defined(_WIN32) */
2983

    
2984
#endif /* CONFIG_SLIRP */
2985

    
2986
#if !defined(_WIN32)
2987

    
2988
typedef struct TAPState {
2989
    VLANClientState *vc;
2990
    int fd;
2991
} TAPState;
2992

    
2993
static void tap_receive(void *opaque, const uint8_t *buf, int size)
2994
{
2995
    TAPState *s = opaque;
2996
    int ret;
2997
    for(;;) {
2998
        ret = write(s->fd, buf, size);
2999
        if (ret < 0 && (errno == EINTR || errno == EAGAIN)) {
3000
        } else {
3001
            break;
3002
        }
3003
    }
3004
}
3005

    
3006
static void tap_send(void *opaque)
3007
{
3008
    TAPState *s = opaque;
3009
    uint8_t buf[4096];
3010
    int size;
3011

    
3012
    size = read(s->fd, buf, sizeof(buf));
3013
    if (size > 0) {
3014
        qemu_send_packet(s->vc, buf, size);
3015
    }
3016
}
3017

    
3018
/* fd support */
3019

    
3020
static TAPState *net_tap_fd_init(VLANState *vlan, int fd)
3021
{
3022
    TAPState *s;
3023

    
3024
    s = qemu_mallocz(sizeof(TAPState));
3025
    if (!s)
3026
        return NULL;
3027
    s->fd = fd;
3028
    s->vc = qemu_new_vlan_client(vlan, tap_receive, NULL, s);
3029
    qemu_set_fd_handler(s->fd, tap_send, NULL, s);
3030
    snprintf(s->vc->info_str, sizeof(s->vc->info_str), "tap: fd=%d", fd);
3031
    return s;
3032
}
3033

    
3034
#ifdef _BSD
3035
static int tap_open(char *ifname, int ifname_size)
3036
{
3037
    int fd;
3038
    char *dev;
3039
    struct stat s;
3040

    
3041
    fd = open("/dev/tap", O_RDWR);
3042
    if (fd < 0) {
3043
        fprintf(stderr, "warning: could not open /dev/tap: no virtual network emulation\n");
3044
        return -1;
3045
    }
3046

    
3047
    fstat(fd, &s);
3048
    dev = devname(s.st_rdev, S_IFCHR);
3049
    pstrcpy(ifname, ifname_size, dev);
3050

    
3051
    fcntl(fd, F_SETFL, O_NONBLOCK);
3052
    return fd;
3053
}
3054
#elif defined(__sun__)
3055
static int tap_open(char *ifname, int ifname_size)
3056
{
3057
    fprintf(stderr, "warning: tap_open not yet implemented\n");
3058
    return -1;
3059
}
3060
#else
3061
static int tap_open(char *ifname, int ifname_size)
3062
{
3063
    struct ifreq ifr;
3064
    int fd, ret;
3065
    
3066
    fd = open("/dev/net/tun", O_RDWR);
3067
    if (fd < 0) {
3068
        fprintf(stderr, "warning: could not open /dev/net/tun: no virtual network emulation\n");
3069
        return -1;
3070
    }
3071
    memset(&ifr, 0, sizeof(ifr));
3072
    ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
3073
    if (ifname[0] != '\0')
3074
        pstrcpy(ifr.ifr_name, IFNAMSIZ, ifname);
3075
    else
3076
        pstrcpy(ifr.ifr_name, IFNAMSIZ, "tap%d");
3077
    ret = ioctl(fd, TUNSETIFF, (void *) &ifr);
3078
    if (ret != 0) {
3079
        fprintf(stderr, "warning: could not configure /dev/net/tun: no virtual network emulation\n");
3080
        close(fd);
3081
        return -1;
3082
    }
3083
    pstrcpy(ifname, ifname_size, ifr.ifr_name);
3084
    fcntl(fd, F_SETFL, O_NONBLOCK);
3085
    return fd;
3086
}
3087
#endif
3088

    
3089
static int net_tap_init(VLANState *vlan, const char *ifname1,
3090
                        const char *setup_script)
3091
{
3092
    TAPState *s;
3093
    int pid, status, fd;
3094
    char *args[3];
3095
    char **parg;
3096
    char ifname[128];
3097

    
3098
    if (ifname1 != NULL)
3099
        pstrcpy(ifname, sizeof(ifname), ifname1);
3100
    else
3101
        ifname[0] = '\0';
3102
    fd = tap_open(ifname, sizeof(ifname));
3103
    if (fd < 0)
3104
        return -1;
3105

    
3106
    if (!setup_script)
3107
        setup_script = "";
3108
    if (setup_script[0] != '\0') {
3109
        /* try to launch network init script */
3110
        pid = fork();
3111
        if (pid >= 0) {
3112
            if (pid == 0) {
3113
                parg = args;
3114
                *parg++ = (char *)setup_script;
3115
                *parg++ = ifname;
3116
                *parg++ = NULL;
3117
                execv(setup_script, args);
3118
                _exit(1);
3119
            }
3120
            while (waitpid(pid, &status, 0) != pid);
3121
            if (!WIFEXITED(status) ||
3122
                WEXITSTATUS(status) != 0) {
3123
                fprintf(stderr, "%s: could not launch network script\n",
3124
                        setup_script);
3125
                return -1;
3126
            }
3127
        }
3128
    }
3129
    s = net_tap_fd_init(vlan, fd);
3130
    if (!s)
3131
        return -1;
3132
    snprintf(s->vc->info_str, sizeof(s->vc->info_str), 
3133
             "tap: ifname=%s setup_script=%s", ifname, setup_script);
3134
    return 0;
3135
}
3136

    
3137
#endif /* !_WIN32 */
3138

    
3139
/* network connection */
3140
typedef struct NetSocketState {
3141
    VLANClientState *vc;
3142
    int fd;
3143
    int state; /* 0 = getting length, 1 = getting data */
3144
    int index;
3145
    int packet_len;
3146
    uint8_t buf[4096];
3147
    struct sockaddr_in dgram_dst; /* contains inet host and port destination iff connectionless (SOCK_DGRAM) */
3148
} NetSocketState;
3149

    
3150
typedef struct NetSocketListenState {
3151
    VLANState *vlan;
3152
    int fd;
3153
} NetSocketListenState;
3154

    
3155
/* XXX: we consider we can send the whole packet without blocking */
3156
static void net_socket_receive(void *opaque, const uint8_t *buf, int size)
3157
{
3158
    NetSocketState *s = opaque;
3159
    uint32_t len;
3160
    len = htonl(size);
3161

    
3162
    send_all(s->fd, (const uint8_t *)&len, sizeof(len));
3163
    send_all(s->fd, buf, size);
3164
}
3165

    
3166
static void net_socket_receive_dgram(void *opaque, const uint8_t *buf, int size)
3167
{
3168
    NetSocketState *s = opaque;
3169
    sendto(s->fd, buf, size, 0, 
3170
           (struct sockaddr *)&s->dgram_dst, sizeof(s->dgram_dst));
3171
}
3172

    
3173
static void net_socket_send(void *opaque)
3174
{
3175
    NetSocketState *s = opaque;
3176
    int l, size, err;
3177
    uint8_t buf1[4096];
3178
    const uint8_t *buf;
3179

    
3180
    size = recv(s->fd, buf1, sizeof(buf1), 0);
3181
    if (size < 0) {
3182
        err = socket_error();
3183
        if (err != EWOULDBLOCK) 
3184
            goto eoc;
3185
    } else if (size == 0) {
3186
        /* end of connection */
3187
    eoc:
3188
        qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
3189
        closesocket(s->fd);
3190
        return;
3191
    }
3192
    buf = buf1;
3193
    while (size > 0) {
3194
        /* reassemble a packet from the network */
3195
        switch(s->state) {
3196
        case 0:
3197
            l = 4 - s->index;
3198
            if (l > size)
3199
                l = size;
3200
            memcpy(s->buf + s->index, buf, l);
3201
            buf += l;
3202
            size -= l;
3203
            s->index += l;
3204
            if (s->index == 4) {
3205
                /* got length */
3206
                s->packet_len = ntohl(*(uint32_t *)s->buf);
3207
                s->index = 0;
3208
                s->state = 1;
3209
            }
3210
            break;
3211
        case 1:
3212
            l = s->packet_len - s->index;
3213
            if (l > size)
3214
                l = size;
3215
            memcpy(s->buf + s->index, buf, l);
3216
            s->index += l;
3217
            buf += l;
3218
            size -= l;
3219
            if (s->index >= s->packet_len) {
3220
                qemu_send_packet(s->vc, s->buf, s->packet_len);
3221
                s->index = 0;
3222
                s->state = 0;
3223
            }
3224
            break;
3225
        }
3226
    }
3227
}
3228

    
3229
static void net_socket_send_dgram(void *opaque)
3230
{
3231
    NetSocketState *s = opaque;
3232
    int size;
3233

    
3234
    size = recv(s->fd, s->buf, sizeof(s->buf), 0);
3235
    if (size < 0) 
3236
        return;
3237
    if (size == 0) {
3238
        /* end of connection */
3239
        qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
3240
        return;
3241
    }
3242
    qemu_send_packet(s->vc, s->buf, size);
3243
}
3244

    
3245
static int net_socket_mcast_create(struct sockaddr_in *mcastaddr)
3246
{
3247
    struct ip_mreq imr;
3248
    int fd;
3249
    int val, ret;
3250
    if (!IN_MULTICAST(ntohl(mcastaddr->sin_addr.s_addr))) {
3251
        fprintf(stderr, "qemu: error: specified mcastaddr \"%s\" (0x%08x) does not contain a multicast address\n",
3252
                inet_ntoa(mcastaddr->sin_addr), 
3253
                (int)ntohl(mcastaddr->sin_addr.s_addr));
3254
        return -1;
3255

    
3256
    }
3257
    fd = socket(PF_INET, SOCK_DGRAM, 0);
3258
    if (fd < 0) {
3259
        perror("socket(PF_INET, SOCK_DGRAM)");
3260
        return -1;
3261
    }
3262

    
3263
    val = 1;
3264
    ret=setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, 
3265
                   (const char *)&val, sizeof(val));
3266
    if (ret < 0) {
3267
        perror("setsockopt(SOL_SOCKET, SO_REUSEADDR)");
3268
        goto fail;
3269
    }
3270

    
3271
    ret = bind(fd, (struct sockaddr *)mcastaddr, sizeof(*mcastaddr));
3272
    if (ret < 0) {
3273
        perror("bind");
3274
        goto fail;
3275
    }
3276
    
3277
    /* Add host to multicast group */
3278
    imr.imr_multiaddr = mcastaddr->sin_addr;
3279
    imr.imr_interface.s_addr = htonl(INADDR_ANY);
3280

    
3281
    ret = setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, 
3282
                     (const char *)&imr, sizeof(struct ip_mreq));
3283
    if (ret < 0) {
3284
        perror("setsockopt(IP_ADD_MEMBERSHIP)");
3285
        goto fail;
3286
    }
3287

    
3288
    /* Force mcast msgs to loopback (eg. several QEMUs in same host */
3289
    val = 1;
3290
    ret=setsockopt(fd, IPPROTO_IP, IP_MULTICAST_LOOP, 
3291
                   (const char *)&val, sizeof(val));
3292
    if (ret < 0) {
3293
        perror("setsockopt(SOL_IP, IP_MULTICAST_LOOP)");
3294
        goto fail;
3295
    }
3296

    
3297
    socket_set_nonblock(fd);
3298
    return fd;
3299
fail:
3300
    if (fd >= 0) 
3301
        closesocket(fd);
3302
    return -1;
3303
}
3304

    
3305
static NetSocketState *net_socket_fd_init_dgram(VLANState *vlan, int fd, 
3306
                                          int is_connected)
3307
{
3308
    struct sockaddr_in saddr;
3309
    int newfd;
3310
    socklen_t saddr_len;
3311
    NetSocketState *s;
3312

    
3313
    /* fd passed: multicast: "learn" dgram_dst address from bound address and save it
3314
     * Because this may be "shared" socket from a "master" process, datagrams would be recv() 
3315
     * by ONLY ONE process: we must "clone" this dgram socket --jjo
3316
     */
3317

    
3318
    if (is_connected) {
3319
        if (getsockname(fd, (struct sockaddr *) &saddr, &saddr_len) == 0) {
3320
            /* must be bound */
3321
            if (saddr.sin_addr.s_addr==0) {
3322
                fprintf(stderr, "qemu: error: init_dgram: fd=%d unbound, cannot setup multicast dst addr\n",
3323
                        fd);
3324
                return NULL;
3325
            }
3326
            /* clone dgram socket */
3327
            newfd = net_socket_mcast_create(&saddr);
3328
            if (newfd < 0) {
3329
                /* error already reported by net_socket_mcast_create() */
3330
                close(fd);
3331
                return NULL;
3332
            }
3333
            /* clone newfd to fd, close newfd */
3334
            dup2(newfd, fd);
3335
            close(newfd);
3336
        
3337
        } else {
3338
            fprintf(stderr, "qemu: error: init_dgram: fd=%d failed getsockname(): %s\n",
3339
                    fd, strerror(errno));
3340
            return NULL;
3341
        }
3342
    }
3343

    
3344
    s = qemu_mallocz(sizeof(NetSocketState));
3345
    if (!s)
3346
        return NULL;
3347
    s->fd = fd;
3348

    
3349
    s->vc = qemu_new_vlan_client(vlan, net_socket_receive_dgram, NULL, s);
3350
    qemu_set_fd_handler(s->fd, net_socket_send_dgram, NULL, s);
3351

    
3352
    /* mcast: save bound address as dst */
3353
    if (is_connected) s->dgram_dst=saddr;
3354

    
3355
    snprintf(s->vc->info_str, sizeof(s->vc->info_str),
3356
            "socket: fd=%d (%s mcast=%s:%d)", 
3357
            fd, is_connected? "cloned" : "",
3358
            inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
3359
    return s;
3360
}
3361

    
3362
static void net_socket_connect(void *opaque)
3363
{
3364
    NetSocketState *s = opaque;
3365
    qemu_set_fd_handler(s->fd, net_socket_send, NULL, s);
3366
}
3367

    
3368
static NetSocketState *net_socket_fd_init_stream(VLANState *vlan, int fd, 
3369
                                          int is_connected)
3370
{
3371
    NetSocketState *s;
3372
    s = qemu_mallocz(sizeof(NetSocketState));
3373
    if (!s)
3374
        return NULL;
3375
    s->fd = fd;
3376
    s->vc = qemu_new_vlan_client(vlan, 
3377
                                 net_socket_receive, NULL, s);
3378
    snprintf(s->vc->info_str, sizeof(s->vc->info_str),
3379
             "socket: fd=%d", fd);
3380
    if (is_connected) {
3381
        net_socket_connect(s);
3382
    } else {
3383
        qemu_set_fd_handler(s->fd, NULL, net_socket_connect, s);
3384
    }
3385
    return s;
3386
}
3387

    
3388
static NetSocketState *net_socket_fd_init(VLANState *vlan, int fd, 
3389
                                          int is_connected)
3390
{
3391
    int so_type=-1, optlen=sizeof(so_type);
3392

    
3393
    if(getsockopt(fd, SOL_SOCKET, SO_TYPE, (char *)&so_type, &optlen)< 0) {
3394
        fprintf(stderr, "qemu: error: setsockopt(SO_TYPE) for fd=%d failed\n", fd);
3395
        return NULL;
3396
    }
3397
    switch(so_type) {
3398
    case SOCK_DGRAM:
3399
        return net_socket_fd_init_dgram(vlan, fd, is_connected);
3400
    case SOCK_STREAM:
3401
        return net_socket_fd_init_stream(vlan, fd, is_connected);
3402
    default:
3403
        /* who knows ... this could be a eg. a pty, do warn and continue as stream */
3404
        fprintf(stderr, "qemu: warning: socket type=%d for fd=%d is not SOCK_DGRAM or SOCK_STREAM\n", so_type, fd);
3405
        return net_socket_fd_init_stream(vlan, fd, is_connected);
3406
    }
3407
    return NULL;
3408
}
3409

    
3410
static void net_socket_accept(void *opaque)
3411
{
3412
    NetSocketListenState *s = opaque;    
3413
    NetSocketState *s1;
3414
    struct sockaddr_in saddr;
3415
    socklen_t len;
3416
    int fd;
3417

    
3418
    for(;;) {
3419
        len = sizeof(saddr);
3420
        fd = accept(s->fd, (struct sockaddr *)&saddr, &len);
3421
        if (fd < 0 && errno != EINTR) {
3422
            return;
3423
        } else if (fd >= 0) {
3424
            break;
3425
        }
3426
    }
3427
    s1 = net_socket_fd_init(s->vlan, fd, 1); 
3428
    if (!s1) {
3429
        closesocket(fd);
3430
    } else {
3431
        snprintf(s1->vc->info_str, sizeof(s1->vc->info_str),
3432
                 "socket: connection from %s:%d", 
3433
                 inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
3434
    }
3435
}
3436

    
3437
static int net_socket_listen_init(VLANState *vlan, const char *host_str)
3438
{
3439
    NetSocketListenState *s;
3440
    int fd, val, ret;
3441
    struct sockaddr_in saddr;
3442

    
3443
    if (parse_host_port(&saddr, host_str) < 0)
3444
        return -1;
3445
    
3446
    s = qemu_mallocz(sizeof(NetSocketListenState));
3447
    if (!s)
3448
        return -1;
3449

    
3450
    fd = socket(PF_INET, SOCK_STREAM, 0);
3451
    if (fd < 0) {
3452
        perror("socket");
3453
        return -1;
3454
    }
3455
    socket_set_nonblock(fd);
3456

    
3457
    /* allow fast reuse */
3458
    val = 1;
3459
    setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const char *)&val, sizeof(val));
3460
    
3461
    ret = bind(fd, (struct sockaddr *)&saddr, sizeof(saddr));
3462
    if (ret < 0) {
3463
        perror("bind");
3464
        return -1;
3465
    }
3466
    ret = listen(fd, 0);
3467
    if (ret < 0) {
3468
        perror("listen");
3469
        return -1;
3470
    }
3471
    s->vlan = vlan;
3472
    s->fd = fd;
3473
    qemu_set_fd_handler(fd, net_socket_accept, NULL, s);
3474
    return 0;
3475
}
3476

    
3477
static int net_socket_connect_init(VLANState *vlan, const char *host_str)
3478
{
3479
    NetSocketState *s;
3480
    int fd, connected, ret, err;
3481
    struct sockaddr_in saddr;
3482

    
3483
    if (parse_host_port(&saddr, host_str) < 0)
3484
        return -1;
3485

    
3486
    fd = socket(PF_INET, SOCK_STREAM, 0);
3487
    if (fd < 0) {
3488
        perror("socket");
3489
        return -1;
3490
    }
3491
    socket_set_nonblock(fd);
3492

    
3493
    connected = 0;
3494
    for(;;) {
3495
        ret = connect(fd, (struct sockaddr *)&saddr, sizeof(saddr));
3496
        if (ret < 0) {
3497
            err = socket_error();
3498
            if (err == EINTR || err == EWOULDBLOCK) {
3499
            } else if (err == EINPROGRESS) {
3500
                break;
3501
            } else {
3502
                perror("connect");
3503
                closesocket(fd);
3504
                return -1;
3505
            }
3506
        } else {
3507
            connected = 1;
3508
            break;
3509
        }
3510
    }
3511
    s = net_socket_fd_init(vlan, fd, connected);
3512
    if (!s)
3513
        return -1;
3514
    snprintf(s->vc->info_str, sizeof(s->vc->info_str),
3515
             "socket: connect to %s:%d", 
3516
             inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
3517
    return 0;
3518
}
3519

    
3520
static int net_socket_mcast_init(VLANState *vlan, const char *host_str)
3521
{
3522
    NetSocketState *s;
3523
    int fd;
3524
    struct sockaddr_in saddr;
3525

    
3526
    if (parse_host_port(&saddr, host_str) < 0)
3527
        return -1;
3528

    
3529

    
3530
    fd = net_socket_mcast_create(&saddr);
3531
    if (fd < 0)
3532
        return -1;
3533

    
3534
    s = net_socket_fd_init(vlan, fd, 0);
3535
    if (!s)
3536
        return -1;
3537

    
3538
    s->dgram_dst = saddr;
3539
    
3540
    snprintf(s->vc->info_str, sizeof(s->vc->info_str),
3541
             "socket: mcast=%s:%d", 
3542
             inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
3543
    return 0;
3544

    
3545
}
3546

    
3547
static int get_param_value(char *buf, int buf_size,
3548
                           const char *tag, const char *str)
3549
{
3550
    const char *p;
3551
    char *q;
3552
    char option[128];
3553

    
3554
    p = str;
3555
    for(;;) {
3556
        q = option;
3557
        while (*p != '\0' && *p != '=') {
3558
            if ((q - option) < sizeof(option) - 1)
3559
                *q++ = *p;
3560
            p++;
3561
        }
3562
        *q = '\0';
3563
        if (*p != '=')
3564
            break;
3565
        p++;
3566
        if (!strcmp(tag, option)) {
3567
            q = buf;
3568
            while (*p != '\0' && *p != ',') {
3569
                if ((q - buf) < buf_size - 1)
3570
                    *q++ = *p;
3571
                p++;
3572
            }
3573
            *q = '\0';
3574
            return q - buf;
3575
        } else {
3576
            while (*p != '\0' && *p != ',') {
3577
                p++;
3578
            }
3579
        }
3580
        if (*p != ',')
3581
            break;
3582
        p++;
3583
    }
3584
    return 0;
3585
}
3586

    
3587
int net_client_init(const char *str)
3588
{
3589
    const char *p;
3590
    char *q;
3591
    char device[64];
3592
    char buf[1024];
3593
    int vlan_id, ret;
3594
    VLANState *vlan;
3595

    
3596
    p = str;
3597
    q = device;
3598
    while (*p != '\0' && *p != ',') {
3599
        if ((q - device) < sizeof(device) - 1)
3600
            *q++ = *p;
3601
        p++;
3602
    }
3603
    *q = '\0';
3604
    if (*p == ',')
3605
        p++;
3606
    vlan_id = 0;
3607
    if (get_param_value(buf, sizeof(buf), "vlan", p)) {
3608
        vlan_id = strtol(buf, NULL, 0);
3609
    }
3610
    vlan = qemu_find_vlan(vlan_id);
3611
    if (!vlan) {
3612
        fprintf(stderr, "Could not create vlan %d\n", vlan_id);
3613
        return -1;
3614
    }
3615
    if (!strcmp(device, "nic")) {
3616
        NICInfo *nd;
3617
        uint8_t *macaddr;
3618

    
3619
        if (nb_nics >= MAX_NICS) {
3620
            fprintf(stderr, "Too Many NICs\n");
3621
            return -1;
3622
        }
3623
        nd = &nd_table[nb_nics];
3624
        macaddr = nd->macaddr;
3625
        macaddr[0] = 0x52;
3626
        macaddr[1] = 0x54;
3627
        macaddr[2] = 0x00;
3628
        macaddr[3] = 0x12;
3629
        macaddr[4] = 0x34;
3630
        macaddr[5] = 0x56 + nb_nics;
3631

    
3632
        if (get_param_value(buf, sizeof(buf), "macaddr", p)) {
3633
            if (parse_macaddr(macaddr, buf) < 0) {
3634
                fprintf(stderr, "invalid syntax for ethernet address\n");
3635
                return -1;
3636
            }
3637
        }
3638
        if (get_param_value(buf, sizeof(buf), "model", p)) {
3639
            nd->model = strdup(buf);
3640
        }
3641
        nd->vlan = vlan;
3642
        nb_nics++;
3643
        ret = 0;
3644
    } else
3645
    if (!strcmp(device, "none")) {
3646
        /* does nothing. It is needed to signal that no network cards
3647
           are wanted */
3648
        ret = 0;
3649
    } else
3650
#ifdef CONFIG_SLIRP
3651
    if (!strcmp(device, "user")) {
3652
        if (get_param_value(buf, sizeof(buf), "hostname", p)) {
3653
            pstrcpy(slirp_hostname, sizeof(slirp_hostname), buf);
3654
        }
3655
        ret = net_slirp_init(vlan);
3656
    } else
3657
#endif
3658
#ifdef _WIN32
3659
    if (!strcmp(device, "tap")) {
3660
        char ifname[64];
3661
        if (get_param_value(ifname, sizeof(ifname), "ifname", p) <= 0) {
3662
            fprintf(stderr, "tap: no interface name\n");
3663
            return -1;
3664
        }
3665
        ret = tap_win32_init(vlan, ifname);
3666
    } else
3667
#else
3668
    if (!strcmp(device, "tap")) {
3669
        char ifname[64];
3670
        char setup_script[1024];
3671
        int fd;
3672
        if (get_param_value(buf, sizeof(buf), "fd", p) > 0) {
3673
            fd = strtol(buf, NULL, 0);
3674
            ret = -1;
3675
            if (net_tap_fd_init(vlan, fd))
3676
                ret = 0;
3677
        } else {
3678
            get_param_value(ifname, sizeof(ifname), "ifname", p);
3679
            if (get_param_value(setup_script, sizeof(setup_script), "script", p) == 0) {
3680
                pstrcpy(setup_script, sizeof(setup_script), DEFAULT_NETWORK_SCRIPT);
3681
            }
3682
            ret = net_tap_init(vlan, ifname, setup_script);
3683
        }
3684
    } else
3685
#endif
3686
    if (!strcmp(device, "socket")) {
3687
        if (get_param_value(buf, sizeof(buf), "fd", p) > 0) {
3688
            int fd;
3689
            fd = strtol(buf, NULL, 0);
3690
            ret = -1;
3691
            if (net_socket_fd_init(vlan, fd, 1))
3692
                ret = 0;
3693
        } else if (get_param_value(buf, sizeof(buf), "listen", p) > 0) {
3694
            ret = net_socket_listen_init(vlan, buf);
3695
        } else if (get_param_value(buf, sizeof(buf), "connect", p) > 0) {
3696
            ret = net_socket_connect_init(vlan, buf);
3697
        } else if (get_param_value(buf, sizeof(buf), "mcast", p) > 0) {
3698
            ret = net_socket_mcast_init(vlan, buf);
3699
        } else {
3700
            fprintf(stderr, "Unknown socket options: %s\n", p);
3701
            return -1;
3702
        }
3703
    } else
3704
    {
3705
        fprintf(stderr, "Unknown network device: %s\n", device);
3706
        return -1;
3707
    }
3708
    if (ret < 0) {
3709
        fprintf(stderr, "Could not initialize device '%s'\n", device);
3710
    }
3711
    
3712
    return ret;
3713
}
3714

    
3715
void do_info_network(void)
3716
{
3717
    VLANState *vlan;
3718
    VLANClientState *vc;
3719

    
3720
    for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) {
3721
        term_printf("VLAN %d devices:\n", vlan->id);
3722
        for(vc = vlan->first_client; vc != NULL; vc = vc->next)
3723
            term_printf("  %s\n", vc->info_str);
3724
    }
3725
}
3726
 
3727
/***********************************************************/
3728
/* USB devices */
3729

    
3730
static USBPort *used_usb_ports;
3731
static USBPort *free_usb_ports;
3732

    
3733
/* ??? Maybe change this to register a hub to keep track of the topology.  */
3734
void qemu_register_usb_port(USBPort *port, void *opaque, int index,
3735
                            usb_attachfn attach)
3736
{
3737
    port->opaque = opaque;
3738
    port->index = index;
3739
    port->attach = attach;
3740
    port->next = free_usb_ports;
3741
    free_usb_ports = port;
3742
}
3743

    
3744
static int usb_device_add(const char *devname)
3745
{
3746
    const char *p;
3747
    USBDevice *dev;
3748
    USBPort *port;
3749

    
3750
    if (!free_usb_ports)
3751
        return -1;
3752

    
3753
    if (strstart(devname, "host:", &p)) {
3754
        dev = usb_host_device_open(p);
3755
    } else if (!strcmp(devname, "mouse")) {
3756
        dev = usb_mouse_init();
3757
    } else if (!strcmp(devname, "tablet")) {
3758
        dev = usb_tablet_init();
3759
    } else if (strstart(devname, "disk:", &p)) {
3760
        dev = usb_msd_init(p);
3761
    } else {
3762
        return -1;
3763
    }
3764
    if (!dev)
3765
        return -1;
3766

    
3767
    /* Find a USB port to add the device to.  */
3768
    port = free_usb_ports;
3769
    if (!port->next) {
3770
        USBDevice *hub;
3771

    
3772
        /* Create a new hub and chain it on.  */
3773
        free_usb_ports = NULL;
3774
        port->next = used_usb_ports;
3775
        used_usb_ports = port;
3776

    
3777
        hub = usb_hub_init(VM_USB_HUB_SIZE);
3778
        usb_attach(port, hub);
3779
        port = free_usb_ports;
3780
    }
3781

    
3782
    free_usb_ports = port->next;
3783
    port->next = used_usb_ports;
3784
    used_usb_ports = port;
3785
    usb_attach(port, dev);
3786
    return 0;
3787
}
3788

    
3789
static int usb_device_del(const char *devname)
3790
{
3791
    USBPort *port;
3792
    USBPort **lastp;
3793
    USBDevice *dev;
3794
    int bus_num, addr;
3795
    const char *p;
3796

    
3797
    if (!used_usb_ports)
3798
        return -1;
3799

    
3800
    p = strchr(devname, '.');
3801
    if (!p) 
3802
        return -1;
3803
    bus_num = strtoul(devname, NULL, 0);
3804
    addr = strtoul(p + 1, NULL, 0);
3805
    if (bus_num != 0)
3806
        return -1;
3807

    
3808
    lastp = &used_usb_ports;
3809
    port = used_usb_ports;
3810
    while (port && port->dev->addr != addr) {
3811
        lastp = &port->next;
3812
        port = port->next;
3813
    }
3814

    
3815
    if (!port)
3816
        return -1;
3817

    
3818
    dev = port->dev;
3819
    *lastp = port->next;
3820
    usb_attach(port, NULL);
3821
    dev->handle_destroy(dev);
3822
    port->next = free_usb_ports;
3823
    free_usb_ports = port;
3824
    return 0;
3825
}
3826

    
3827
void do_usb_add(const char *devname)
3828
{
3829
    int ret;
3830
    ret = usb_device_add(devname);
3831
    if (ret < 0) 
3832
        term_printf("Could not add USB device '%s'\n", devname);
3833
}
3834

    
3835
void do_usb_del(const char *devname)
3836
{
3837
    int ret;
3838
    ret = usb_device_del(devname);
3839
    if (ret < 0) 
3840
        term_printf("Could not remove USB device '%s'\n", devname);
3841
}
3842

    
3843
void usb_info(void)
3844
{
3845
    USBDevice *dev;
3846
    USBPort *port;
3847
    const char *speed_str;
3848

    
3849
    if (!usb_enabled) {
3850
        term_printf("USB support not enabled\n");
3851
        return;
3852
    }
3853

    
3854
    for (port = used_usb_ports; port; port = port->next) {
3855
        dev = port->dev;
3856
        if (!dev)
3857
            continue;
3858
        switch(dev->speed) {
3859
        case USB_SPEED_LOW: 
3860
            speed_str = "1.5"; 
3861
            break;
3862
        case USB_SPEED_FULL: 
3863
            speed_str = "12"; 
3864
            break;
3865
        case USB_SPEED_HIGH: 
3866
            speed_str = "480"; 
3867
            break;
3868
        default:
3869
            speed_str = "?"; 
3870
            break;
3871
        }
3872
        term_printf("  Device %d.%d, Speed %s Mb/s, Product %s\n", 
3873
                    0, dev->addr, speed_str, dev->devname);
3874
    }
3875
}
3876

    
3877
/***********************************************************/
3878
/* pid file */
3879

    
3880
static char *pid_filename;
3881

    
3882
/* Remove PID file. Called on normal exit */
3883

    
3884
static void remove_pidfile(void) 
3885
{
3886
    unlink (pid_filename);
3887
}
3888

    
3889
static void create_pidfile(const char *filename)
3890
{
3891
    struct stat pidstat;
3892
    FILE *f;
3893

    
3894
    /* Try to write our PID to the named file */
3895
    if (stat(filename, &pidstat) < 0) {
3896
        if (errno == ENOENT) {
3897
            if ((f = fopen (filename, "w")) == NULL) {
3898
                perror("Opening pidfile");
3899
                exit(1);
3900
            }
3901
            fprintf(f, "%d\n", getpid());
3902
            fclose(f);
3903
            pid_filename = qemu_strdup(filename);
3904
            if (!pid_filename) {
3905
                fprintf(stderr, "Could not save PID filename");
3906
                exit(1);
3907
            }
3908
            atexit(remove_pidfile);
3909
        }
3910
    } else {
3911
        fprintf(stderr, "%s already exists. Remove it and try again.\n", 
3912
                filename);
3913
        exit(1);
3914
    }
3915
}
3916

    
3917
/***********************************************************/
3918
/* dumb display */
3919

    
3920
static void dumb_update(DisplayState *ds, int x, int y, int w, int h)
3921
{
3922
}
3923

    
3924
static void dumb_resize(DisplayState *ds, int w, int h)
3925
{
3926
}
3927

    
3928
static void dumb_refresh(DisplayState *ds)
3929
{
3930
    vga_hw_update();
3931
}
3932

    
3933
void dumb_display_init(DisplayState *ds)
3934
{
3935
    ds->data = NULL;
3936
    ds->linesize = 0;
3937
    ds->depth = 0;
3938
    ds->dpy_update = dumb_update;
3939
    ds->dpy_resize = dumb_resize;
3940
    ds->dpy_refresh = dumb_refresh;
3941
}
3942

    
3943
/***********************************************************/
3944
/* I/O handling */
3945

    
3946
#define MAX_IO_HANDLERS 64
3947

    
3948
typedef struct IOHandlerRecord {
3949
    int fd;
3950
    IOCanRWHandler *fd_read_poll;
3951
    IOHandler *fd_read;
3952
    IOHandler *fd_write;
3953
    void *opaque;
3954
    /* temporary data */
3955
    struct pollfd *ufd;
3956
    struct IOHandlerRecord *next;
3957
} IOHandlerRecord;
3958

    
3959
static IOHandlerRecord *first_io_handler;
3960

    
3961
/* XXX: fd_read_poll should be suppressed, but an API change is
3962
   necessary in the character devices to suppress fd_can_read(). */
3963
int qemu_set_fd_handler2(int fd, 
3964
                         IOCanRWHandler *fd_read_poll, 
3965
                         IOHandler *fd_read, 
3966
                         IOHandler *fd_write, 
3967
                         void *opaque)
3968
{
3969
    IOHandlerRecord **pioh, *ioh;
3970

    
3971
    if (!fd_read && !fd_write) {
3972
        pioh = &first_io_handler;
3973
        for(;;) {
3974
            ioh = *pioh;
3975
            if (ioh == NULL)
3976
                break;
3977
            if (ioh->fd == fd) {
3978
                *pioh = ioh->next;
3979
                qemu_free(ioh);
3980
                break;
3981
            }
3982
            pioh = &ioh->next;
3983
        }
3984
    } else {
3985
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
3986
            if (ioh->fd == fd)
3987
                goto found;
3988
        }
3989
        ioh = qemu_mallocz(sizeof(IOHandlerRecord));
3990
        if (!ioh)
3991
            return -1;
3992
        ioh->next = first_io_handler;
3993
        first_io_handler = ioh;
3994
    found:
3995
        ioh->fd = fd;
3996
        ioh->fd_read_poll = fd_read_poll;
3997
        ioh->fd_read = fd_read;
3998
        ioh->fd_write = fd_write;
3999
        ioh->opaque = opaque;
4000
    }
4001
    return 0;
4002
}
4003

    
4004
int qemu_set_fd_handler(int fd, 
4005
                        IOHandler *fd_read, 
4006
                        IOHandler *fd_write, 
4007
                        void *opaque)
4008
{
4009
    return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
4010
}
4011

    
4012
/***********************************************************/
4013
/* Polling handling */
4014

    
4015
typedef struct PollingEntry {
4016
    PollingFunc *func;
4017
    void *opaque;
4018
    struct PollingEntry *next;
4019
} PollingEntry;
4020

    
4021
static PollingEntry *first_polling_entry;
4022

    
4023
int qemu_add_polling_cb(PollingFunc *func, void *opaque)
4024
{
4025
    PollingEntry **ppe, *pe;
4026
    pe = qemu_mallocz(sizeof(PollingEntry));
4027
    if (!pe)
4028
        return -1;
4029
    pe->func = func;
4030
    pe->opaque = opaque;
4031
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next);
4032
    *ppe = pe;
4033
    return 0;
4034
}
4035

    
4036
void qemu_del_polling_cb(PollingFunc *func, void *opaque)
4037
{
4038
    PollingEntry **ppe, *pe;
4039
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next) {
4040
        pe = *ppe;
4041
        if (pe->func == func && pe->opaque == opaque) {
4042
            *ppe = pe->next;
4043
            qemu_free(pe);
4044
            break;
4045
        }
4046
    }
4047
}
4048

    
4049
#ifdef _WIN32
4050
/***********************************************************/
4051
/* Wait objects support */
4052
typedef struct WaitObjects {
4053
    int num;
4054
    HANDLE events[MAXIMUM_WAIT_OBJECTS + 1];
4055
    WaitObjectFunc *func[MAXIMUM_WAIT_OBJECTS + 1];
4056
    void *opaque[MAXIMUM_WAIT_OBJECTS + 1];
4057
} WaitObjects;
4058

    
4059
static WaitObjects wait_objects = {0};
4060
    
4061
int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
4062
{
4063
    WaitObjects *w = &wait_objects;
4064

    
4065
    if (w->num >= MAXIMUM_WAIT_OBJECTS)
4066
        return -1;
4067
    w->events[w->num] = handle;
4068
    w->func[w->num] = func;
4069
    w->opaque[w->num] = opaque;
4070
    w->num++;
4071
    return 0;
4072
}
4073

    
4074
void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
4075
{
4076
    int i, found;
4077
    WaitObjects *w = &wait_objects;
4078

    
4079
    found = 0;
4080
    for (i = 0; i < w->num; i++) {
4081
        if (w->events[i] == handle)
4082
            found = 1;
4083
        if (found) {
4084
            w->events[i] = w->events[i + 1];
4085
            w->func[i] = w->func[i + 1];
4086
            w->opaque[i] = w->opaque[i + 1];
4087
        }            
4088
    }
4089
    if (found)
4090
        w->num--;
4091
}
4092
#endif
4093

    
4094
/***********************************************************/
4095
/* savevm/loadvm support */
4096

    
4097
#define IO_BUF_SIZE 32768
4098

    
4099
struct QEMUFile {
4100
    FILE *outfile;
4101
    BlockDriverState *bs;
4102
    int is_file;
4103
    int is_writable;
4104
    int64_t base_offset;
4105
    int64_t buf_offset; /* start of buffer when writing, end of buffer
4106
                           when reading */
4107
    int buf_index;
4108
    int buf_size; /* 0 when writing */
4109
    uint8_t buf[IO_BUF_SIZE];
4110
};
4111

    
4112
QEMUFile *qemu_fopen(const char *filename, const char *mode)
4113
{
4114
    QEMUFile *f;
4115

    
4116
    f = qemu_mallocz(sizeof(QEMUFile));
4117
    if (!f)
4118
        return NULL;
4119
    if (!strcmp(mode, "wb")) {
4120
        f->is_writable = 1;
4121
    } else if (!strcmp(mode, "rb")) {
4122
        f->is_writable = 0;
4123
    } else {
4124
        goto fail;
4125
    }
4126
    f->outfile = fopen(filename, mode);
4127
    if (!f->outfile)
4128
        goto fail;
4129
    f->is_file = 1;
4130
    return f;
4131
 fail:
4132
    if (f->outfile)
4133
        fclose(f->outfile);
4134
    qemu_free(f);
4135
    return NULL;
4136
}
4137

    
4138
QEMUFile *qemu_fopen_bdrv(BlockDriverState *bs, int64_t offset, int is_writable)
4139
{
4140
    QEMUFile *f;
4141

    
4142
    f = qemu_mallocz(sizeof(QEMUFile));
4143
    if (!f)
4144
        return NULL;
4145
    f->is_file = 0;
4146
    f->bs = bs;
4147
    f->is_writable = is_writable;
4148
    f->base_offset = offset;
4149
    return f;
4150
}
4151

    
4152
void qemu_fflush(QEMUFile *f)
4153
{
4154
    if (!f->is_writable)
4155
        return;
4156
    if (f->buf_index > 0) {
4157
        if (f->is_file) {
4158
            fseek(f->outfile, f->buf_offset, SEEK_SET);
4159
            fwrite(f->buf, 1, f->buf_index, f->outfile);
4160
        } else {
4161
            bdrv_pwrite(f->bs, f->base_offset + f->buf_offset, 
4162
                        f->buf, f->buf_index);
4163
        }
4164
        f->buf_offset += f->buf_index;
4165
        f->buf_index = 0;
4166
    }
4167
}
4168

    
4169
static void qemu_fill_buffer(QEMUFile *f)
4170
{
4171
    int len;
4172

    
4173
    if (f->is_writable)
4174
        return;
4175
    if (f->is_file) {
4176
        fseek(f->outfile, f->buf_offset, SEEK_SET);
4177
        len = fread(f->buf, 1, IO_BUF_SIZE, f->outfile);
4178
        if (len < 0)
4179
            len = 0;
4180
    } else {
4181
        len = bdrv_pread(f->bs, f->base_offset + f->buf_offset, 
4182
                         f->buf, IO_BUF_SIZE);
4183
        if (len < 0)
4184
            len = 0;
4185
    }
4186
    f->buf_index = 0;
4187
    f->buf_size = len;
4188
    f->buf_offset += len;
4189
}
4190

    
4191
void qemu_fclose(QEMUFile *f)
4192
{
4193
    if (f->is_writable)
4194
        qemu_fflush(f);
4195
    if (f->is_file) {
4196
        fclose(f->outfile);
4197
    }
4198
    qemu_free(f);
4199
}
4200

    
4201
void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size)
4202
{
4203
    int l;
4204
    while (size > 0) {
4205
        l = IO_BUF_SIZE - f->buf_index;
4206
        if (l > size)
4207
            l = size;
4208
        memcpy(f->buf + f->buf_index, buf, l);
4209
        f->buf_index += l;
4210
        buf += l;
4211
        size -= l;
4212
        if (f->buf_index >= IO_BUF_SIZE)
4213
            qemu_fflush(f);
4214
    }
4215
}
4216

    
4217
void qemu_put_byte(QEMUFile *f, int v)
4218
{
4219
    f->buf[f->buf_index++] = v;
4220
    if (f->buf_index >= IO_BUF_SIZE)
4221
        qemu_fflush(f);
4222
}
4223

    
4224
int qemu_get_buffer(QEMUFile *f, uint8_t *buf, int size1)
4225
{
4226
    int size, l;
4227

    
4228
    size = size1;
4229
    while (size > 0) {
4230
        l = f->buf_size - f->buf_index;
4231
        if (l == 0) {
4232
            qemu_fill_buffer(f);
4233
            l = f->buf_size - f->buf_index;
4234
            if (l == 0)
4235
                break;
4236
        }
4237
        if (l > size)
4238
            l = size;
4239
        memcpy(buf, f->buf + f->buf_index, l);
4240
        f->buf_index += l;
4241
        buf += l;
4242
        size -= l;
4243
    }
4244
    return size1 - size;
4245
}
4246

    
4247
int qemu_get_byte(QEMUFile *f)
4248
{
4249
    if (f->buf_index >= f->buf_size) {
4250
        qemu_fill_buffer(f);
4251
        if (f->buf_index >= f->buf_size)
4252
            return 0;
4253
    }
4254
    return f->buf[f->buf_index++];
4255
}
4256

    
4257
int64_t qemu_ftell(QEMUFile *f)
4258
{
4259
    return f->buf_offset - f->buf_size + f->buf_index;
4260
}
4261

    
4262
int64_t qemu_fseek(QEMUFile *f, int64_t pos, int whence)
4263
{
4264
    if (whence == SEEK_SET) {
4265
        /* nothing to do */
4266
    } else if (whence == SEEK_CUR) {
4267
        pos += qemu_ftell(f);
4268
    } else {
4269
        /* SEEK_END not supported */
4270
        return -1;
4271
    }
4272
    if (f->is_writable) {
4273
        qemu_fflush(f);
4274
        f->buf_offset = pos;
4275
    } else {
4276
        f->buf_offset = pos;
4277
        f->buf_index = 0;
4278
        f->buf_size = 0;
4279
    }
4280
    return pos;
4281
}
4282

    
4283
void qemu_put_be16(QEMUFile *f, unsigned int v)
4284
{
4285
    qemu_put_byte(f, v >> 8);
4286
    qemu_put_byte(f, v);
4287
}
4288

    
4289
void qemu_put_be32(QEMUFile *f, unsigned int v)
4290
{
4291
    qemu_put_byte(f, v >> 24);
4292
    qemu_put_byte(f, v >> 16);
4293
    qemu_put_byte(f, v >> 8);
4294
    qemu_put_byte(f, v);
4295
}
4296

    
4297
void qemu_put_be64(QEMUFile *f, uint64_t v)
4298
{
4299
    qemu_put_be32(f, v >> 32);
4300
    qemu_put_be32(f, v);
4301
}
4302

    
4303
unsigned int qemu_get_be16(QEMUFile *f)
4304
{
4305
    unsigned int v;
4306
    v = qemu_get_byte(f) << 8;
4307
    v |= qemu_get_byte(f);
4308
    return v;
4309
}
4310

    
4311
unsigned int qemu_get_be32(QEMUFile *f)
4312
{
4313
    unsigned int v;
4314
    v = qemu_get_byte(f) << 24;
4315
    v |= qemu_get_byte(f) << 16;
4316
    v |= qemu_get_byte(f) << 8;
4317
    v |= qemu_get_byte(f);
4318
    return v;
4319
}
4320

    
4321
uint64_t qemu_get_be64(QEMUFile *f)
4322
{
4323
    uint64_t v;
4324
    v = (uint64_t)qemu_get_be32(f) << 32;
4325
    v |= qemu_get_be32(f);
4326
    return v;
4327
}
4328

    
4329
typedef struct SaveStateEntry {
4330
    char idstr[256];
4331
    int instance_id;
4332
    int version_id;
4333
    SaveStateHandler *save_state;
4334
    LoadStateHandler *load_state;
4335
    void *opaque;
4336
    struct SaveStateEntry *next;
4337
} SaveStateEntry;
4338

    
4339
static SaveStateEntry *first_se;
4340

    
4341
int register_savevm(const char *idstr, 
4342
                    int instance_id, 
4343
                    int version_id,
4344
                    SaveStateHandler *save_state,
4345
                    LoadStateHandler *load_state,
4346
                    void *opaque)
4347
{
4348
    SaveStateEntry *se, **pse;
4349

    
4350
    se = qemu_malloc(sizeof(SaveStateEntry));
4351
    if (!se)
4352
        return -1;
4353
    pstrcpy(se->idstr, sizeof(se->idstr), idstr);
4354
    se->instance_id = instance_id;
4355
    se->version_id = version_id;
4356
    se->save_state = save_state;
4357
    se->load_state = load_state;
4358
    se->opaque = opaque;
4359
    se->next = NULL;
4360

    
4361
    /* add at the end of list */
4362
    pse = &first_se;
4363
    while (*pse != NULL)
4364
        pse = &(*pse)->next;
4365
    *pse = se;
4366
    return 0;
4367
}
4368

    
4369
#define QEMU_VM_FILE_MAGIC   0x5145564d
4370
#define QEMU_VM_FILE_VERSION 0x00000002
4371

    
4372
int qemu_savevm_state(QEMUFile *f)
4373
{
4374
    SaveStateEntry *se;
4375
    int len, ret;
4376
    int64_t cur_pos, len_pos, total_len_pos;
4377

    
4378
    qemu_put_be32(f, QEMU_VM_FILE_MAGIC);
4379
    qemu_put_be32(f, QEMU_VM_FILE_VERSION);
4380
    total_len_pos = qemu_ftell(f);
4381
    qemu_put_be64(f, 0); /* total size */
4382

    
4383
    for(se = first_se; se != NULL; se = se->next) {
4384
        /* ID string */
4385
        len = strlen(se->idstr);
4386
        qemu_put_byte(f, len);
4387
        qemu_put_buffer(f, se->idstr, len);
4388

    
4389
        qemu_put_be32(f, se->instance_id);
4390
        qemu_put_be32(f, se->version_id);
4391

    
4392
        /* record size: filled later */
4393
        len_pos = qemu_ftell(f);
4394
        qemu_put_be32(f, 0);
4395
        
4396
        se->save_state(f, se->opaque);
4397

    
4398
        /* fill record size */
4399
        cur_pos = qemu_ftell(f);
4400
        len = cur_pos - len_pos - 4;
4401
        qemu_fseek(f, len_pos, SEEK_SET);
4402
        qemu_put_be32(f, len);
4403
        qemu_fseek(f, cur_pos, SEEK_SET);
4404
    }
4405
    cur_pos = qemu_ftell(f);
4406
    qemu_fseek(f, total_len_pos, SEEK_SET);
4407
    qemu_put_be64(f, cur_pos - total_len_pos - 8);
4408
    qemu_fseek(f, cur_pos, SEEK_SET);
4409

    
4410
    ret = 0;
4411
    return ret;
4412
}
4413

    
4414
static SaveStateEntry *find_se(const char *idstr, int instance_id)
4415
{
4416
    SaveStateEntry *se;
4417

    
4418
    for(se = first_se; se != NULL; se = se->next) {
4419
        if (!strcmp(se->idstr, idstr) && 
4420
            instance_id == se->instance_id)
4421
            return se;
4422
    }
4423
    return NULL;
4424
}
4425

    
4426
int qemu_loadvm_state(QEMUFile *f)
4427
{
4428
    SaveStateEntry *se;
4429
    int len, ret, instance_id, record_len, version_id;
4430
    int64_t total_len, end_pos, cur_pos;
4431
    unsigned int v;
4432
    char idstr[256];
4433
    
4434
    v = qemu_get_be32(f);
4435
    if (v != QEMU_VM_FILE_MAGIC)
4436
        goto fail;
4437
    v = qemu_get_be32(f);
4438
    if (v != QEMU_VM_FILE_VERSION) {
4439
    fail:
4440
        ret = -1;
4441
        goto the_end;
4442
    }
4443
    total_len = qemu_get_be64(f);
4444
    end_pos = total_len + qemu_ftell(f);
4445
    for(;;) {
4446
        if (qemu_ftell(f) >= end_pos)
4447
            break;
4448
        len = qemu_get_byte(f);
4449
        qemu_get_buffer(f, idstr, len);
4450
        idstr[len] = '\0';
4451
        instance_id = qemu_get_be32(f);
4452
        version_id = qemu_get_be32(f);
4453
        record_len = qemu_get_be32(f);
4454
#if 0
4455
        printf("idstr=%s instance=0x%x version=%d len=%d\n", 
4456
               idstr, instance_id, version_id, record_len);
4457
#endif
4458
        cur_pos = qemu_ftell(f);
4459
        se = find_se(idstr, instance_id);
4460
        if (!se) {
4461
            fprintf(stderr, "qemu: warning: instance 0x%x of device '%s' not present in current VM\n", 
4462
                    instance_id, idstr);
4463
        } else {
4464
            ret = se->load_state(f, se->opaque, version_id);
4465
            if (ret < 0) {
4466
                fprintf(stderr, "qemu: warning: error while loading state for instance 0x%x of device '%s'\n", 
4467
                        instance_id, idstr);
4468
            }
4469
        }
4470
        /* always seek to exact end of record */
4471
        qemu_fseek(f, cur_pos + record_len, SEEK_SET);
4472
    }
4473
    ret = 0;
4474
 the_end:
4475
    return ret;
4476
}
4477

    
4478
/* device can contain snapshots */
4479
static int bdrv_can_snapshot(BlockDriverState *bs)
4480
{
4481
    return (bs &&
4482
            !bdrv_is_removable(bs) &&
4483
            !bdrv_is_read_only(bs));
4484
}
4485

    
4486
/* device must be snapshots in order to have a reliable snapshot */
4487
static int bdrv_has_snapshot(BlockDriverState *bs)
4488
{
4489
    return (bs &&
4490
            !bdrv_is_removable(bs) &&
4491
            !bdrv_is_read_only(bs));
4492
}
4493

    
4494
static BlockDriverState *get_bs_snapshots(void)
4495
{
4496
    BlockDriverState *bs;
4497
    int i;
4498

    
4499
    if (bs_snapshots)
4500
        return bs_snapshots;
4501
    for(i = 0; i <= MAX_DISKS; i++) {
4502
        bs = bs_table[i];
4503
        if (bdrv_can_snapshot(bs))
4504
            goto ok;
4505
    }
4506
    return NULL;
4507
 ok:
4508
    bs_snapshots = bs;
4509
    return bs;
4510
}
4511

    
4512
static int bdrv_snapshot_find(BlockDriverState *bs, QEMUSnapshotInfo *sn_info,
4513
                              const char *name)
4514
{
4515
    QEMUSnapshotInfo *sn_tab, *sn;
4516
    int nb_sns, i, ret;
4517
    
4518
    ret = -ENOENT;
4519
    nb_sns = bdrv_snapshot_list(bs, &sn_tab);
4520
    if (nb_sns < 0)
4521
        return ret;
4522
    for(i = 0; i < nb_sns; i++) {
4523
        sn = &sn_tab[i];
4524
        if (!strcmp(sn->id_str, name) || !strcmp(sn->name, name)) {
4525
            *sn_info = *sn;
4526
            ret = 0;
4527
            break;
4528
        }
4529
    }
4530
    qemu_free(sn_tab);
4531
    return ret;
4532
}
4533

    
4534
void do_savevm(const char *name)
4535
{
4536
    BlockDriverState *bs, *bs1;
4537
    QEMUSnapshotInfo sn1, *sn = &sn1, old_sn1, *old_sn = &old_sn1;
4538
    int must_delete, ret, i;
4539
    BlockDriverInfo bdi1, *bdi = &bdi1;
4540
    QEMUFile *f;
4541
    int saved_vm_running;
4542
#ifdef _WIN32
4543
    struct _timeb tb;
4544
#else
4545
    struct timeval tv;
4546
#endif
4547

    
4548
    bs = get_bs_snapshots();
4549
    if (!bs) {
4550
        term_printf("No block device can accept snapshots\n");
4551
        return;
4552
    }
4553

    
4554
    saved_vm_running = vm_running;
4555
    vm_stop(0);
4556
    
4557
    must_delete = 0;
4558
    if (name) {
4559
        ret = bdrv_snapshot_find(bs, old_sn, name);
4560
        if (ret >= 0) {
4561
            must_delete = 1;
4562
        }
4563
    }
4564
    memset(sn, 0, sizeof(*sn));
4565
    if (must_delete) {
4566
        pstrcpy(sn->name, sizeof(sn->name), old_sn->name);
4567
        pstrcpy(sn->id_str, sizeof(sn->id_str), old_sn->id_str);
4568
    } else {
4569
        if (name)
4570
            pstrcpy(sn->name, sizeof(sn->name), name);
4571
    }
4572

    
4573
    /* fill auxiliary fields */
4574
#ifdef _WIN32
4575
    _ftime(&tb);
4576
    sn->date_sec = tb.time;
4577
    sn->date_nsec = tb.millitm * 1000000;
4578
#else
4579
    gettimeofday(&tv, NULL);
4580
    sn->date_sec = tv.tv_sec;
4581
    sn->date_nsec = tv.tv_usec * 1000;
4582
#endif
4583
    sn->vm_clock_nsec = qemu_get_clock(vm_clock);
4584
    
4585
    if (bdrv_get_info(bs, bdi) < 0 || bdi->vm_state_offset <= 0) {
4586
        term_printf("Device %s does not support VM state snapshots\n",
4587
                    bdrv_get_device_name(bs));
4588
        goto the_end;
4589
    }
4590
    
4591
    /* save the VM state */
4592
    f = qemu_fopen_bdrv(bs, bdi->vm_state_offset, 1);
4593
    if (!f) {
4594
        term_printf("Could not open VM state file\n");
4595
        goto the_end;
4596
    }
4597
    ret = qemu_savevm_state(f);
4598
    sn->vm_state_size = qemu_ftell(f);
4599
    qemu_fclose(f);
4600
    if (ret < 0) {
4601
        term_printf("Error %d while writing VM\n", ret);
4602
        goto the_end;
4603
    }
4604
    
4605
    /* create the snapshots */
4606

    
4607
    for(i = 0; i < MAX_DISKS; i++) {
4608
        bs1 = bs_table[i];
4609
        if (bdrv_has_snapshot(bs1)) {
4610
            if (must_delete) {
4611
                ret = bdrv_snapshot_delete(bs1, old_sn->id_str);
4612
                if (ret < 0) {
4613
                    term_printf("Error while deleting snapshot on '%s'\n",
4614
                                bdrv_get_device_name(bs1));
4615
                }
4616
            }
4617
            ret = bdrv_snapshot_create(bs1, sn);
4618
            if (ret < 0) {
4619
                term_printf("Error while creating snapshot on '%s'\n",
4620
                            bdrv_get_device_name(bs1));
4621
            }
4622
        }
4623
    }
4624

    
4625
 the_end:
4626
    if (saved_vm_running)
4627
        vm_start();
4628
}
4629

    
4630
void do_loadvm(const char *name)
4631
{
4632
    BlockDriverState *bs, *bs1;
4633
    BlockDriverInfo bdi1, *bdi = &bdi1;
4634
    QEMUFile *f;
4635
    int i, ret;
4636
    int saved_vm_running;
4637

    
4638
    bs = get_bs_snapshots();
4639
    if (!bs) {
4640
        term_printf("No block device supports snapshots\n");
4641
        return;
4642
    }
4643
    
4644
    saved_vm_running = vm_running;
4645
    vm_stop(0);
4646

    
4647
    for(i = 0; i <= MAX_DISKS; i++) {
4648
        bs1 = bs_table[i];
4649
        if (bdrv_has_snapshot(bs1)) {
4650
            ret = bdrv_snapshot_goto(bs1, name);
4651
            if (ret < 0) {
4652
                if (bs != bs1)
4653
                    term_printf("Warning: ");
4654
                switch(ret) {
4655
                case -ENOTSUP:
4656
                    term_printf("Snapshots not supported on device '%s'\n",
4657
                                bdrv_get_device_name(bs1));
4658
                    break;
4659
                case -ENOENT:
4660
                    term_printf("Could not find snapshot '%s' on device '%s'\n",
4661
                                name, bdrv_get_device_name(bs1));
4662
                    break;
4663
                default:
4664
                    term_printf("Error %d while activating snapshot on '%s'\n",
4665
                                ret, bdrv_get_device_name(bs1));
4666
                    break;
4667
                }
4668
                /* fatal on snapshot block device */
4669
                if (bs == bs1)
4670
                    goto the_end;
4671
            }
4672
        }
4673
    }
4674

    
4675
    if (bdrv_get_info(bs, bdi) < 0 || bdi->vm_state_offset <= 0) {
4676
        term_printf("Device %s does not support VM state snapshots\n",
4677
                    bdrv_get_device_name(bs));
4678
        return;
4679
    }
4680
    
4681
    /* restore the VM state */
4682
    f = qemu_fopen_bdrv(bs, bdi->vm_state_offset, 0);
4683
    if (!f) {
4684
        term_printf("Could not open VM state file\n");
4685
        goto the_end;
4686
    }
4687
    ret = qemu_loadvm_state(f);
4688
    qemu_fclose(f);
4689
    if (ret < 0) {
4690
        term_printf("Error %d while loading VM state\n", ret);
4691
    }
4692
 the_end:
4693
    if (saved_vm_running)
4694
        vm_start();
4695
}
4696

    
4697
void do_delvm(const char *name)
4698
{
4699
    BlockDriverState *bs, *bs1;
4700
    int i, ret;
4701

    
4702
    bs = get_bs_snapshots();
4703
    if (!bs) {
4704
        term_printf("No block device supports snapshots\n");
4705
        return;
4706
    }
4707
    
4708
    for(i = 0; i <= MAX_DISKS; i++) {
4709
        bs1 = bs_table[i];
4710
        if (bdrv_has_snapshot(bs1)) {
4711
            ret = bdrv_snapshot_delete(bs1, name);
4712
            if (ret < 0) {
4713
                if (ret == -ENOTSUP)
4714
                    term_printf("Snapshots not supported on device '%s'\n",
4715
                                bdrv_get_device_name(bs1));
4716
                else
4717
                    term_printf("Error %d while deleting snapshot on '%s'\n",
4718
                                ret, bdrv_get_device_name(bs1));
4719
            }
4720
        }
4721
    }
4722
}
4723

    
4724
void do_info_snapshots(void)
4725
{
4726
    BlockDriverState *bs, *bs1;
4727
    QEMUSnapshotInfo *sn_tab, *sn;
4728
    int nb_sns, i;
4729
    char buf[256];
4730

    
4731
    bs = get_bs_snapshots();
4732
    if (!bs) {
4733
        term_printf("No available block device supports snapshots\n");
4734
        return;
4735
    }
4736
    term_printf("Snapshot devices:");
4737
    for(i = 0; i <= MAX_DISKS; i++) {
4738
        bs1 = bs_table[i];
4739
        if (bdrv_has_snapshot(bs1)) {
4740
            if (bs == bs1)
4741
                term_printf(" %s", bdrv_get_device_name(bs1));
4742
        }
4743
    }
4744
    term_printf("\n");
4745

    
4746
    nb_sns = bdrv_snapshot_list(bs, &sn_tab);
4747
    if (nb_sns < 0) {
4748
        term_printf("bdrv_snapshot_list: error %d\n", nb_sns);
4749
        return;
4750
    }
4751
    term_printf("Snapshot list (from %s):\n", bdrv_get_device_name(bs));
4752
    term_printf("%s\n", bdrv_snapshot_dump(buf, sizeof(buf), NULL));
4753
    for(i = 0; i < nb_sns; i++) {
4754
        sn = &sn_tab[i];
4755
        term_printf("%s\n", bdrv_snapshot_dump(buf, sizeof(buf), sn));
4756
    }
4757
    qemu_free(sn_tab);
4758
}
4759

    
4760
/***********************************************************/
4761
/* cpu save/restore */
4762

    
4763
#if defined(TARGET_I386)
4764

    
4765
static void cpu_put_seg(QEMUFile *f, SegmentCache *dt)
4766
{
4767
    qemu_put_be32(f, dt->selector);
4768
    qemu_put_betl(f, dt->base);
4769
    qemu_put_be32(f, dt->limit);
4770
    qemu_put_be32(f, dt->flags);
4771
}
4772

    
4773
static void cpu_get_seg(QEMUFile *f, SegmentCache *dt)
4774
{
4775
    dt->selector = qemu_get_be32(f);
4776
    dt->base = qemu_get_betl(f);
4777
    dt->limit = qemu_get_be32(f);
4778
    dt->flags = qemu_get_be32(f);
4779
}
4780

    
4781
void cpu_save(QEMUFile *f, void *opaque)
4782
{
4783
    CPUState *env = opaque;
4784
    uint16_t fptag, fpus, fpuc, fpregs_format;
4785
    uint32_t hflags;
4786
    int i;
4787
    
4788
    for(i = 0; i < CPU_NB_REGS; i++)
4789
        qemu_put_betls(f, &env->regs[i]);
4790
    qemu_put_betls(f, &env->eip);
4791
    qemu_put_betls(f, &env->eflags);
4792
    hflags = env->hflags; /* XXX: suppress most of the redundant hflags */
4793
    qemu_put_be32s(f, &hflags);
4794
    
4795
    /* FPU */
4796
    fpuc = env->fpuc;
4797
    fpus = (env->fpus & ~0x3800) | (env->fpstt & 0x7) << 11;
4798
    fptag = 0;
4799
    for(i = 0; i < 8; i++) {
4800
        fptag |= ((!env->fptags[i]) << i);
4801
    }
4802
    
4803
    qemu_put_be16s(f, &fpuc);
4804
    qemu_put_be16s(f, &fpus);
4805
    qemu_put_be16s(f, &fptag);
4806

    
4807
#ifdef USE_X86LDOUBLE
4808
    fpregs_format = 0;
4809
#else
4810
    fpregs_format = 1;
4811
#endif
4812
    qemu_put_be16s(f, &fpregs_format);
4813
    
4814
    for(i = 0; i < 8; i++) {
4815
#ifdef USE_X86LDOUBLE
4816
        {
4817
            uint64_t mant;
4818
            uint16_t exp;
4819
            /* we save the real CPU data (in case of MMX usage only 'mant'
4820
               contains the MMX register */
4821
            cpu_get_fp80(&mant, &exp, env->fpregs[i].d);
4822
            qemu_put_be64(f, mant);
4823
            qemu_put_be16(f, exp);
4824
        }
4825
#else
4826
        /* if we use doubles for float emulation, we save the doubles to
4827
           avoid losing information in case of MMX usage. It can give
4828
           problems if the image is restored on a CPU where long
4829
           doubles are used instead. */
4830
        qemu_put_be64(f, env->fpregs[i].mmx.MMX_Q(0));
4831
#endif
4832
    }
4833

    
4834
    for(i = 0; i < 6; i++)
4835
        cpu_put_seg(f, &env->segs[i]);
4836
    cpu_put_seg(f, &env->ldt);
4837
    cpu_put_seg(f, &env->tr);
4838
    cpu_put_seg(f, &env->gdt);
4839
    cpu_put_seg(f, &env->idt);
4840
    
4841
    qemu_put_be32s(f, &env->sysenter_cs);
4842
    qemu_put_be32s(f, &env->sysenter_esp);
4843
    qemu_put_be32s(f, &env->sysenter_eip);
4844
    
4845
    qemu_put_betls(f, &env->cr[0]);
4846
    qemu_put_betls(f, &env->cr[2]);
4847
    qemu_put_betls(f, &env->cr[3]);
4848
    qemu_put_betls(f, &env->cr[4]);
4849
    
4850
    for(i = 0; i < 8; i++)
4851
        qemu_put_betls(f, &env->dr[i]);
4852

    
4853
    /* MMU */
4854
    qemu_put_be32s(f, &env->a20_mask);
4855

    
4856
    /* XMM */
4857
    qemu_put_be32s(f, &env->mxcsr);
4858
    for(i = 0; i < CPU_NB_REGS; i++) {
4859
        qemu_put_be64s(f, &env->xmm_regs[i].XMM_Q(0));
4860
        qemu_put_be64s(f, &env->xmm_regs[i].XMM_Q(1));
4861
    }
4862

    
4863
#ifdef TARGET_X86_64
4864
    qemu_put_be64s(f, &env->efer);
4865
    qemu_put_be64s(f, &env->star);
4866
    qemu_put_be64s(f, &env->lstar);
4867
    qemu_put_be64s(f, &env->cstar);
4868
    qemu_put_be64s(f, &env->fmask);
4869
    qemu_put_be64s(f, &env->kernelgsbase);
4870
#endif
4871
}
4872

    
4873
#ifdef USE_X86LDOUBLE
4874
/* XXX: add that in a FPU generic layer */
4875
union x86_longdouble {
4876
    uint64_t mant;
4877
    uint16_t exp;
4878
};
4879

    
4880
#define MANTD1(fp)        (fp & ((1LL << 52) - 1))
4881
#define EXPBIAS1 1023
4882
#define EXPD1(fp)        ((fp >> 52) & 0x7FF)
4883
#define SIGND1(fp)        ((fp >> 32) & 0x80000000)
4884

    
4885
static void fp64_to_fp80(union x86_longdouble *p, uint64_t temp)
4886
{
4887
    int e;
4888
    /* mantissa */
4889
    p->mant = (MANTD1(temp) << 11) | (1LL << 63);
4890
    /* exponent + sign */
4891
    e = EXPD1(temp) - EXPBIAS1 + 16383;
4892
    e |= SIGND1(temp) >> 16;
4893
    p->exp = e;
4894
}
4895
#endif
4896

    
4897
int cpu_load(QEMUFile *f, void *opaque, int version_id)
4898
{
4899
    CPUState *env = opaque;
4900
    int i, guess_mmx;
4901
    uint32_t hflags;
4902
    uint16_t fpus, fpuc, fptag, fpregs_format;
4903

    
4904
    if (version_id != 3)
4905
        return -EINVAL;
4906
    for(i = 0; i < CPU_NB_REGS; i++)
4907
        qemu_get_betls(f, &env->regs[i]);
4908
    qemu_get_betls(f, &env->eip);
4909
    qemu_get_betls(f, &env->eflags);
4910
    qemu_get_be32s(f, &hflags);
4911

    
4912
    qemu_get_be16s(f, &fpuc);
4913
    qemu_get_be16s(f, &fpus);
4914
    qemu_get_be16s(f, &fptag);
4915
    qemu_get_be16s(f, &fpregs_format);
4916
    
4917
    /* NOTE: we cannot always restore the FPU state if the image come
4918
       from a host with a different 'USE_X86LDOUBLE' define. We guess
4919
       if we are in an MMX state to restore correctly in that case. */
4920
    guess_mmx = ((fptag == 0xff) && (fpus & 0x3800) == 0);
4921
    for(i = 0; i < 8; i++) {
4922
        uint64_t mant;
4923
        uint16_t exp;
4924
        
4925
        switch(fpregs_format) {
4926
        case 0:
4927
            mant = qemu_get_be64(f);
4928
            exp = qemu_get_be16(f);
4929
#ifdef USE_X86LDOUBLE
4930
            env->fpregs[i].d = cpu_set_fp80(mant, exp);
4931
#else
4932
            /* difficult case */
4933
            if (guess_mmx)
4934
                env->fpregs[i].mmx.MMX_Q(0) = mant;
4935
            else
4936
                env->fpregs[i].d = cpu_set_fp80(mant, exp);
4937
#endif
4938
            break;
4939
        case 1:
4940
            mant = qemu_get_be64(f);
4941
#ifdef USE_X86LDOUBLE
4942
            {
4943
                union x86_longdouble *p;
4944
                /* difficult case */
4945
                p = (void *)&env->fpregs[i];
4946
                if (guess_mmx) {
4947
                    p->mant = mant;
4948
                    p->exp = 0xffff;
4949
                } else {
4950
                    fp64_to_fp80(p, mant);
4951
                }
4952
            }
4953
#else
4954
            env->fpregs[i].mmx.MMX_Q(0) = mant;
4955
#endif            
4956
            break;
4957
        default:
4958
            return -EINVAL;
4959
        }
4960
    }
4961

    
4962
    env->fpuc = fpuc;
4963
    /* XXX: restore FPU round state */
4964
    env->fpstt = (fpus >> 11) & 7;
4965
    env->fpus = fpus & ~0x3800;
4966
    fptag ^= 0xff;
4967
    for(i = 0; i < 8; i++) {
4968
        env->fptags[i] = (fptag >> i) & 1;
4969
    }
4970
    
4971
    for(i = 0; i < 6; i++)
4972
        cpu_get_seg(f, &env->segs[i]);
4973
    cpu_get_seg(f, &env->ldt);
4974
    cpu_get_seg(f, &env->tr);
4975
    cpu_get_seg(f, &env->gdt);
4976
    cpu_get_seg(f, &env->idt);
4977
    
4978
    qemu_get_be32s(f, &env->sysenter_cs);
4979
    qemu_get_be32s(f, &env->sysenter_esp);
4980
    qemu_get_be32s(f, &env->sysenter_eip);
4981
    
4982
    qemu_get_betls(f, &env->cr[0]);
4983
    qemu_get_betls(f, &env->cr[2]);
4984
    qemu_get_betls(f, &env->cr[3]);
4985
    qemu_get_betls(f, &env->cr[4]);
4986
    
4987
    for(i = 0; i < 8; i++)
4988
        qemu_get_betls(f, &env->dr[i]);
4989

    
4990
    /* MMU */
4991
    qemu_get_be32s(f, &env->a20_mask);
4992

    
4993
    qemu_get_be32s(f, &env->mxcsr);
4994
    for(i = 0; i < CPU_NB_REGS; i++) {
4995
        qemu_get_be64s(f, &env->xmm_regs[i].XMM_Q(0));
4996
        qemu_get_be64s(f, &env->xmm_regs[i].XMM_Q(1));
4997
    }
4998

    
4999
#ifdef TARGET_X86_64
5000
    qemu_get_be64s(f, &env->efer);
5001
    qemu_get_be64s(f, &env->star);
5002
    qemu_get_be64s(f, &env->lstar);
5003
    qemu_get_be64s(f, &env->cstar);
5004
    qemu_get_be64s(f, &env->fmask);
5005
    qemu_get_be64s(f, &env->kernelgsbase);
5006
#endif
5007

    
5008
    /* XXX: compute hflags from scratch, except for CPL and IIF */
5009
    env->hflags = hflags;
5010
    tlb_flush(env, 1);
5011
    return 0;
5012
}
5013

    
5014
#elif defined(TARGET_PPC)
5015
void cpu_save(QEMUFile *f, void *opaque)
5016
{
5017
}
5018

    
5019
int cpu_load(QEMUFile *f, void *opaque, int version_id)
5020
{
5021
    return 0;
5022
}
5023

    
5024
#elif defined(TARGET_MIPS)
5025
void cpu_save(QEMUFile *f, void *opaque)
5026
{
5027
}
5028

    
5029
int cpu_load(QEMUFile *f, void *opaque, int version_id)
5030
{
5031
    return 0;
5032
}
5033

    
5034
#elif defined(TARGET_SPARC)
5035
void cpu_save(QEMUFile *f, void *opaque)
5036
{
5037
    CPUState *env = opaque;
5038
    int i;
5039
    uint32_t tmp;
5040

    
5041
    for(i = 0; i < 8; i++)
5042
        qemu_put_betls(f, &env->gregs[i]);
5043
    for(i = 0; i < NWINDOWS * 16; i++)
5044
        qemu_put_betls(f, &env->regbase[i]);
5045

    
5046
    /* FPU */
5047
    for(i = 0; i < TARGET_FPREGS; i++) {
5048
        union {
5049
            float32 f;
5050
            uint32_t i;
5051
        } u;
5052
        u.f = env->fpr[i];
5053
        qemu_put_be32(f, u.i);
5054
    }
5055

    
5056
    qemu_put_betls(f, &env->pc);
5057
    qemu_put_betls(f, &env->npc);
5058
    qemu_put_betls(f, &env->y);
5059
    tmp = GET_PSR(env);
5060
    qemu_put_be32(f, tmp);
5061
    qemu_put_betls(f, &env->fsr);
5062
    qemu_put_betls(f, &env->tbr);
5063
#ifndef TARGET_SPARC64
5064
    qemu_put_be32s(f, &env->wim);
5065
    /* MMU */
5066
    for(i = 0; i < 16; i++)
5067
        qemu_put_be32s(f, &env->mmuregs[i]);
5068
#endif
5069
}
5070

    
5071
int cpu_load(QEMUFile *f, void *opaque, int version_id)
5072
{
5073
    CPUState *env = opaque;
5074
    int i;
5075
    uint32_t tmp;
5076

    
5077
    for(i = 0; i < 8; i++)
5078
        qemu_get_betls(f, &env->gregs[i]);
5079
    for(i = 0; i < NWINDOWS * 16; i++)
5080
        qemu_get_betls(f, &env->regbase[i]);
5081

    
5082
    /* FPU */
5083
    for(i = 0; i < TARGET_FPREGS; i++) {
5084
        union {
5085
            float32 f;
5086
            uint32_t i;
5087
        } u;
5088
        u.i = qemu_get_be32(f);
5089
        env->fpr[i] = u.f;
5090
    }
5091

    
5092
    qemu_get_betls(f, &env->pc);
5093
    qemu_get_betls(f, &env->npc);
5094
    qemu_get_betls(f, &env->y);
5095
    tmp = qemu_get_be32(f);
5096
    env->cwp = 0; /* needed to ensure that the wrapping registers are
5097
                     correctly updated */
5098
    PUT_PSR(env, tmp);
5099
    qemu_get_betls(f, &env->fsr);
5100
    qemu_get_betls(f, &env->tbr);
5101
#ifndef TARGET_SPARC64
5102
    qemu_get_be32s(f, &env->wim);
5103
    /* MMU */
5104
    for(i = 0; i < 16; i++)
5105
        qemu_get_be32s(f, &env->mmuregs[i]);
5106
#endif
5107
    tlb_flush(env, 1);
5108
    return 0;
5109
}
5110

    
5111
#elif defined(TARGET_ARM)
5112

    
5113
/* ??? Need to implement these.  */
5114
void cpu_save(QEMUFile *f, void *opaque)
5115
{
5116
}
5117

    
5118
int cpu_load(QEMUFile *f, void *opaque, int version_id)
5119
{
5120
    return 0;
5121
}
5122

    
5123
#else
5124

    
5125
#warning No CPU save/restore functions
5126

    
5127
#endif
5128

    
5129
/***********************************************************/
5130
/* ram save/restore */
5131

    
5132
static int ram_get_page(QEMUFile *f, uint8_t *buf, int len)
5133
{
5134
    int v;
5135

    
5136
    v = qemu_get_byte(f);
5137
    switch(v) {
5138
    case 0:
5139
        if (qemu_get_buffer(f, buf, len) != len)
5140
            return -EIO;
5141
        break;
5142
    case 1:
5143
        v = qemu_get_byte(f);
5144
        memset(buf, v, len);
5145
        break;
5146
    default:
5147
        return -EINVAL;
5148
    }
5149
    return 0;
5150
}
5151

    
5152
static int ram_load_v1(QEMUFile *f, void *opaque)
5153
{
5154
    int i, ret;
5155

    
5156
    if (qemu_get_be32(f) != phys_ram_size)
5157
        return -EINVAL;
5158
    for(i = 0; i < phys_ram_size; i+= TARGET_PAGE_SIZE) {
5159
        ret = ram_get_page(f, phys_ram_base + i, TARGET_PAGE_SIZE);
5160
        if (ret)
5161
            return ret;
5162
    }
5163
    return 0;
5164
}
5165

    
5166
#define BDRV_HASH_BLOCK_SIZE 1024
5167
#define IOBUF_SIZE 4096
5168
#define RAM_CBLOCK_MAGIC 0xfabe
5169

    
5170
typedef struct RamCompressState {
5171
    z_stream zstream;
5172
    QEMUFile *f;
5173
    uint8_t buf[IOBUF_SIZE];
5174
} RamCompressState;
5175

    
5176
static int ram_compress_open(RamCompressState *s, QEMUFile *f)
5177
{
5178
    int ret;
5179
    memset(s, 0, sizeof(*s));
5180
    s->f = f;
5181
    ret = deflateInit2(&s->zstream, 1,
5182
                       Z_DEFLATED, 15, 
5183
                       9, Z_DEFAULT_STRATEGY);
5184
    if (ret != Z_OK)
5185
        return -1;
5186
    s->zstream.avail_out = IOBUF_SIZE;
5187
    s->zstream.next_out = s->buf;
5188
    return 0;
5189
}
5190

    
5191
static void ram_put_cblock(RamCompressState *s, const uint8_t *buf, int len)
5192
{
5193
    qemu_put_be16(s->f, RAM_CBLOCK_MAGIC);
5194
    qemu_put_be16(s->f, len);
5195
    qemu_put_buffer(s->f, buf, len);
5196
}
5197

    
5198
static int ram_compress_buf(RamCompressState *s, const uint8_t *buf, int len)
5199
{
5200
    int ret;
5201

    
5202
    s->zstream.avail_in = len;
5203
    s->zstream.next_in = (uint8_t *)buf;
5204
    while (s->zstream.avail_in > 0) {
5205
        ret = deflate(&s->zstream, Z_NO_FLUSH);
5206
        if (ret != Z_OK)
5207
            return -1;
5208
        if (s->zstream.avail_out == 0) {
5209
            ram_put_cblock(s, s->buf, IOBUF_SIZE);
5210
            s->zstream.avail_out = IOBUF_SIZE;
5211
            s->zstream.next_out = s->buf;
5212
        }
5213
    }
5214
    return 0;
5215
}
5216

    
5217
static void ram_compress_close(RamCompressState *s)
5218
{
5219
    int len, ret;
5220

    
5221
    /* compress last bytes */
5222
    for(;;) {
5223
        ret = deflate(&s->zstream, Z_FINISH);
5224
        if (ret == Z_OK || ret == Z_STREAM_END) {
5225
            len = IOBUF_SIZE - s->zstream.avail_out;
5226
            if (len > 0) {
5227
                ram_put_cblock(s, s->buf, len);
5228
            }
5229
            s->zstream.avail_out = IOBUF_SIZE;
5230
            s->zstream.next_out = s->buf;
5231
            if (ret == Z_STREAM_END)
5232
                break;
5233
        } else {
5234
            goto fail;
5235
        }
5236
    }
5237
fail:
5238
    deflateEnd(&s->zstream);
5239
}
5240

    
5241
typedef struct RamDecompressState {
5242
    z_stream zstream;
5243
    QEMUFile *f;
5244
    uint8_t buf[IOBUF_SIZE];
5245
} RamDecompressState;
5246

    
5247
static int ram_decompress_open(RamDecompressState *s, QEMUFile *f)
5248
{
5249
    int ret;
5250
    memset(s, 0, sizeof(*s));
5251
    s->f = f;
5252
    ret = inflateInit(&s->zstream);
5253
    if (ret != Z_OK)
5254
        return -1;
5255
    return 0;
5256
}
5257

    
5258
static int ram_decompress_buf(RamDecompressState *s, uint8_t *buf, int len)
5259
{
5260
    int ret, clen;
5261

    
5262
    s->zstream.avail_out = len;
5263
    s->zstream.next_out = buf;
5264
    while (s->zstream.avail_out > 0) {
5265
        if (s->zstream.avail_in == 0) {
5266
            if (qemu_get_be16(s->f) != RAM_CBLOCK_MAGIC)
5267
                return -1;
5268
            clen = qemu_get_be16(s->f);
5269
            if (clen > IOBUF_SIZE)
5270
                return -1;
5271
            qemu_get_buffer(s->f, s->buf, clen);
5272
            s->zstream.avail_in = clen;
5273
            s->zstream.next_in = s->buf;
5274
        }
5275
        ret = inflate(&s->zstream, Z_PARTIAL_FLUSH);
5276
        if (ret != Z_OK && ret != Z_STREAM_END) {
5277
            return -1;
5278
        }
5279
    }
5280
    return 0;
5281
}
5282

    
5283
static void ram_decompress_close(RamDecompressState *s)
5284
{
5285
    inflateEnd(&s->zstream);
5286
}
5287

    
5288
static void ram_save(QEMUFile *f, void *opaque)
5289
{
5290
    int i;
5291
    RamCompressState s1, *s = &s1;
5292
    uint8_t buf[10];
5293
    
5294
    qemu_put_be32(f, phys_ram_size);
5295
    if (ram_compress_open(s, f) < 0)
5296
        return;
5297
    for(i = 0; i < phys_ram_size; i+= BDRV_HASH_BLOCK_SIZE) {
5298
#if 0
5299
        if (tight_savevm_enabled) {
5300
            int64_t sector_num;
5301
            int j;
5302

5303
            /* find if the memory block is available on a virtual
5304
               block device */
5305
            sector_num = -1;
5306
            for(j = 0; j < MAX_DISKS; j++) {
5307
                if (bs_table[j]) {
5308
                    sector_num = bdrv_hash_find(bs_table[j], 
5309
                                                phys_ram_base + i, BDRV_HASH_BLOCK_SIZE);
5310
                    if (sector_num >= 0)
5311
                        break;
5312
                }
5313
            }
5314
            if (j == MAX_DISKS)
5315
                goto normal_compress;
5316
            buf[0] = 1;
5317
            buf[1] = j;
5318
            cpu_to_be64wu((uint64_t *)(buf + 2), sector_num);
5319
            ram_compress_buf(s, buf, 10);
5320
        } else 
5321
#endif
5322
        {
5323
            //        normal_compress:
5324
            buf[0] = 0;
5325
            ram_compress_buf(s, buf, 1);
5326
            ram_compress_buf(s, phys_ram_base + i, BDRV_HASH_BLOCK_SIZE);
5327
        }
5328
    }
5329
    ram_compress_close(s);
5330
}
5331

    
5332
static int ram_load(QEMUFile *f, void *opaque, int version_id)
5333
{
5334
    RamDecompressState s1, *s = &s1;
5335
    uint8_t buf[10];
5336
    int i;
5337

    
5338
    if (version_id == 1)
5339
        return ram_load_v1(f, opaque);
5340
    if (version_id != 2)
5341
        return -EINVAL;
5342
    if (qemu_get_be32(f) != phys_ram_size)
5343
        return -EINVAL;
5344
    if (ram_decompress_open(s, f) < 0)
5345
        return -EINVAL;
5346
    for(i = 0; i < phys_ram_size; i+= BDRV_HASH_BLOCK_SIZE) {
5347
        if (ram_decompress_buf(s, buf, 1) < 0) {
5348
            fprintf(stderr, "Error while reading ram block header\n");
5349
            goto error;
5350
        }
5351
        if (buf[0] == 0) {
5352
            if (ram_decompress_buf(s, phys_ram_base + i, BDRV_HASH_BLOCK_SIZE) < 0) {
5353
                fprintf(stderr, "Error while reading ram block address=0x%08x", i);
5354
                goto error;
5355
            }
5356
        } else 
5357
#if 0
5358
        if (buf[0] == 1) {
5359
            int bs_index;
5360
            int64_t sector_num;
5361

5362
            ram_decompress_buf(s, buf + 1, 9);
5363
            bs_index = buf[1];
5364
            sector_num = be64_to_cpupu((const uint64_t *)(buf + 2));
5365
            if (bs_index >= MAX_DISKS || bs_table[bs_index] == NULL) {
5366
                fprintf(stderr, "Invalid block device index %d\n", bs_index);
5367
                goto error;
5368
            }
5369
            if (bdrv_read(bs_table[bs_index], sector_num, phys_ram_base + i, 
5370
                          BDRV_HASH_BLOCK_SIZE / 512) < 0) {
5371
                fprintf(stderr, "Error while reading sector %d:%" PRId64 "\n", 
5372
                        bs_index, sector_num);
5373
                goto error;
5374
            }
5375
        } else 
5376
#endif
5377
        {
5378
        error:
5379
            printf("Error block header\n");
5380
            return -EINVAL;
5381
        }
5382
    }
5383
    ram_decompress_close(s);
5384
    return 0;
5385
}
5386

    
5387
/***********************************************************/
5388
/* bottom halves (can be seen as timers which expire ASAP) */
5389

    
5390
struct QEMUBH {
5391
    QEMUBHFunc *cb;
5392
    void *opaque;
5393
    int scheduled;
5394
    QEMUBH *next;
5395
};
5396

    
5397
static QEMUBH *first_bh = NULL;
5398

    
5399
QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque)
5400
{
5401
    QEMUBH *bh;
5402
    bh = qemu_mallocz(sizeof(QEMUBH));
5403
    if (!bh)
5404
        return NULL;
5405
    bh->cb = cb;
5406
    bh->opaque = opaque;
5407
    return bh;
5408
}
5409

    
5410
int qemu_bh_poll(void)
5411
{
5412
    QEMUBH *bh, **pbh;
5413
    int ret;
5414

    
5415
    ret = 0;
5416
    for(;;) {
5417
        pbh = &first_bh;
5418
        bh = *pbh;
5419
        if (!bh)
5420
            break;
5421
        ret = 1;
5422
        *pbh = bh->next;
5423
        bh->scheduled = 0;
5424
        bh->cb(bh->opaque);
5425
    }
5426
    return ret;
5427
}
5428

    
5429
void qemu_bh_schedule(QEMUBH *bh)
5430
{
5431
    CPUState *env = cpu_single_env;
5432
    if (bh->scheduled)
5433
        return;
5434
    bh->scheduled = 1;
5435
    bh->next = first_bh;
5436
    first_bh = bh;
5437

    
5438
    /* stop the currently executing CPU to execute the BH ASAP */
5439
    if (env) {
5440
        cpu_interrupt(env, CPU_INTERRUPT_EXIT);
5441
    }
5442
}
5443

    
5444
void qemu_bh_cancel(QEMUBH *bh)
5445
{
5446
    QEMUBH **pbh;
5447
    if (bh->scheduled) {
5448
        pbh = &first_bh;
5449
        while (*pbh != bh)
5450
            pbh = &(*pbh)->next;
5451
        *pbh = bh->next;
5452
        bh->scheduled = 0;
5453
    }
5454
}
5455

    
5456
void qemu_bh_delete(QEMUBH *bh)
5457
{
5458
    qemu_bh_cancel(bh);
5459
    qemu_free(bh);
5460
}
5461

    
5462
/***********************************************************/
5463
/* machine registration */
5464

    
5465
QEMUMachine *first_machine = NULL;
5466

    
5467
int qemu_register_machine(QEMUMachine *m)
5468
{
5469
    QEMUMachine **pm;
5470
    pm = &first_machine;
5471
    while (*pm != NULL)
5472
        pm = &(*pm)->next;
5473
    m->next = NULL;
5474
    *pm = m;
5475
    return 0;
5476
}
5477

    
5478
QEMUMachine *find_machine(const char *name)
5479
{
5480
    QEMUMachine *m;
5481

    
5482
    for(m = first_machine; m != NULL; m = m->next) {
5483
        if (!strcmp(m->name, name))
5484
            return m;
5485
    }
5486
    return NULL;
5487
}
5488

    
5489
/***********************************************************/
5490
/* main execution loop */
5491

    
5492
void gui_update(void *opaque)
5493
{
5494
    display_state.dpy_refresh(&display_state);
5495
    qemu_mod_timer(gui_timer, GUI_REFRESH_INTERVAL + qemu_get_clock(rt_clock));
5496
}
5497

    
5498
struct vm_change_state_entry {
5499
    VMChangeStateHandler *cb;
5500
    void *opaque;
5501
    LIST_ENTRY (vm_change_state_entry) entries;
5502
};
5503

    
5504
static LIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
5505

    
5506
VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
5507
                                                     void *opaque)
5508
{
5509
    VMChangeStateEntry *e;
5510

    
5511
    e = qemu_mallocz(sizeof (*e));
5512
    if (!e)
5513
        return NULL;
5514

    
5515
    e->cb = cb;
5516
    e->opaque = opaque;
5517
    LIST_INSERT_HEAD(&vm_change_state_head, e, entries);
5518
    return e;
5519
}
5520

    
5521
void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
5522
{
5523
    LIST_REMOVE (e, entries);
5524
    qemu_free (e);
5525
}
5526

    
5527
static void vm_state_notify(int running)
5528
{
5529
    VMChangeStateEntry *e;
5530

    
5531
    for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) {
5532
        e->cb(e->opaque, running);
5533
    }
5534
}
5535

    
5536
/* XXX: support several handlers */
5537
static VMStopHandler *vm_stop_cb;
5538
static void *vm_stop_opaque;
5539

    
5540
int qemu_add_vm_stop_handler(VMStopHandler *cb, void *opaque)
5541
{
5542
    vm_stop_cb = cb;
5543
    vm_stop_opaque = opaque;
5544
    return 0;
5545
}
5546

    
5547
void qemu_del_vm_stop_handler(VMStopHandler *cb, void *opaque)
5548
{
5549
    vm_stop_cb = NULL;
5550
}
5551

    
5552
void vm_start(void)
5553
{
5554
    if (!vm_running) {
5555
        cpu_enable_ticks();
5556
        vm_running = 1;
5557
        vm_state_notify(1);
5558
    }
5559
}
5560

    
5561
void vm_stop(int reason) 
5562
{
5563
    if (vm_running) {
5564
        cpu_disable_ticks();
5565
        vm_running = 0;
5566
        if (reason != 0) {
5567
            if (vm_stop_cb) {
5568
                vm_stop_cb(vm_stop_opaque, reason);
5569
            }
5570
        }
5571
        vm_state_notify(0);
5572
    }
5573
}
5574

    
5575
/* reset/shutdown handler */
5576

    
5577
typedef struct QEMUResetEntry {
5578
    QEMUResetHandler *func;
5579
    void *opaque;
5580
    struct QEMUResetEntry *next;
5581
} QEMUResetEntry;
5582

    
5583
static QEMUResetEntry *first_reset_entry;
5584
static int reset_requested;
5585
static int shutdown_requested;
5586
static int powerdown_requested;
5587

    
5588
void qemu_register_reset(QEMUResetHandler *func, void *opaque)
5589
{
5590
    QEMUResetEntry **pre, *re;
5591

    
5592
    pre = &first_reset_entry;
5593
    while (*pre != NULL)
5594
        pre = &(*pre)->next;
5595
    re = qemu_mallocz(sizeof(QEMUResetEntry));
5596
    re->func = func;
5597
    re->opaque = opaque;
5598
    re->next = NULL;
5599
    *pre = re;
5600
}
5601

    
5602
void qemu_system_reset(void)
5603
{
5604
    QEMUResetEntry *re;
5605

    
5606
    /* reset all devices */
5607
    for(re = first_reset_entry; re != NULL; re = re->next) {
5608
        re->func(re->opaque);
5609
    }
5610
}
5611

    
5612
void qemu_system_reset_request(void)
5613
{
5614
    reset_requested = 1;
5615
    if (cpu_single_env)
5616
        cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
5617
}
5618

    
5619
void qemu_system_shutdown_request(void)
5620
{
5621
    shutdown_requested = 1;
5622
    if (cpu_single_env)
5623
        cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
5624
}
5625

    
5626
void qemu_system_powerdown_request(void)
5627
{
5628
    powerdown_requested = 1;
5629
    if (cpu_single_env)
5630
        cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
5631
}
5632

    
5633
void main_loop_wait(int timeout)
5634
{
5635
    IOHandlerRecord *ioh, *ioh_next;
5636
    fd_set rfds, wfds, xfds;
5637
    int ret, nfds;
5638
    struct timeval tv;
5639
    PollingEntry *pe;
5640

    
5641

    
5642
    /* XXX: need to suppress polling by better using win32 events */
5643
    ret = 0;
5644
    for(pe = first_polling_entry; pe != NULL; pe = pe->next) {
5645
        ret |= pe->func(pe->opaque);
5646
    }
5647
#ifdef _WIN32
5648
    if (ret == 0 && timeout > 0) {
5649
        int err;
5650
        WaitObjects *w = &wait_objects;
5651
        
5652
        ret = WaitForMultipleObjects(w->num, w->events, FALSE, timeout);
5653
        if (WAIT_OBJECT_0 + 0 <= ret && ret <= WAIT_OBJECT_0 + w->num - 1) {
5654
            if (w->func[ret - WAIT_OBJECT_0])
5655
                w->func[ret - WAIT_OBJECT_0](w->opaque[ret - WAIT_OBJECT_0]);
5656
        } else if (ret == WAIT_TIMEOUT) {
5657
        } else {
5658
            err = GetLastError();
5659
            fprintf(stderr, "Wait error %d %d\n", ret, err);
5660
        }
5661
    }
5662
#endif
5663
    /* poll any events */
5664
    /* XXX: separate device handlers from system ones */
5665
    nfds = -1;
5666
    FD_ZERO(&rfds);
5667
    FD_ZERO(&wfds);
5668
    FD_ZERO(&xfds);
5669
    for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
5670
        if (ioh->fd_read &&
5671
            (!ioh->fd_read_poll ||
5672
             ioh->fd_read_poll(ioh->opaque) != 0)) {
5673
            FD_SET(ioh->fd, &rfds);
5674
            if (ioh->fd > nfds)
5675
                nfds = ioh->fd;
5676
        }
5677
        if (ioh->fd_write) {
5678
            FD_SET(ioh->fd, &wfds);
5679
            if (ioh->fd > nfds)
5680
                nfds = ioh->fd;
5681
        }
5682
    }
5683
    
5684
    tv.tv_sec = 0;
5685
#ifdef _WIN32
5686
    tv.tv_usec = 0;
5687
#else
5688
    tv.tv_usec = timeout * 1000;
5689
#endif
5690
#if defined(CONFIG_SLIRP)
5691
    if (slirp_inited) {
5692
        slirp_select_fill(&nfds, &rfds, &wfds, &xfds);
5693
    }
5694
#endif
5695
    ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv);
5696
    if (ret > 0) {
5697
        /* XXX: better handling of removal */
5698
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh_next) {
5699
            ioh_next = ioh->next;
5700
            if (FD_ISSET(ioh->fd, &rfds)) {
5701
                ioh->fd_read(ioh->opaque);
5702
            }
5703
            if (FD_ISSET(ioh->fd, &wfds)) {
5704
                ioh->fd_write(ioh->opaque);
5705
            }
5706
        }
5707
    }
5708
#if defined(CONFIG_SLIRP)
5709
    if (slirp_inited) {
5710
        if (ret < 0) {
5711
            FD_ZERO(&rfds);
5712
            FD_ZERO(&wfds);
5713
            FD_ZERO(&xfds);
5714
        }
5715
        slirp_select_poll(&rfds, &wfds, &xfds);
5716
    }
5717
#endif
5718
#ifdef _WIN32
5719
    tap_win32_poll();
5720
#endif
5721
    qemu_aio_poll();
5722
    qemu_bh_poll();
5723

    
5724
    if (vm_running) {
5725
        qemu_run_timers(&active_timers[QEMU_TIMER_VIRTUAL], 
5726
                        qemu_get_clock(vm_clock));
5727
        /* run dma transfers, if any */
5728
        DMA_run();
5729
    }
5730
    
5731
    /* real time timers */
5732
    qemu_run_timers(&active_timers[QEMU_TIMER_REALTIME], 
5733
                    qemu_get_clock(rt_clock));
5734
}
5735

    
5736
static CPUState *cur_cpu;
5737

    
5738
int main_loop(void)
5739
{
5740
    int ret, timeout;
5741
#ifdef CONFIG_PROFILER
5742
    int64_t ti;
5743
#endif
5744
    CPUState *env;
5745

    
5746
    cur_cpu = first_cpu;
5747
    for(;;) {
5748
        if (vm_running) {
5749

    
5750
            env = cur_cpu;
5751
            for(;;) {
5752
                /* get next cpu */
5753
                env = env->next_cpu;
5754
                if (!env)
5755
                    env = first_cpu;
5756
#ifdef CONFIG_PROFILER
5757
                ti = profile_getclock();
5758
#endif
5759
                ret = cpu_exec(env);
5760
#ifdef CONFIG_PROFILER
5761
                qemu_time += profile_getclock() - ti;
5762
#endif
5763
                if (ret != EXCP_HALTED)
5764
                    break;
5765
                /* all CPUs are halted ? */
5766
                if (env == cur_cpu) {
5767
                    ret = EXCP_HLT;
5768
                    break;
5769
                }
5770
            }
5771
            cur_cpu = env;
5772

    
5773
            if (shutdown_requested) {
5774
                ret = EXCP_INTERRUPT;
5775
                break;
5776
            }
5777
            if (reset_requested) {
5778
                reset_requested = 0;
5779
                qemu_system_reset();
5780
                ret = EXCP_INTERRUPT;
5781
            }
5782
            if (powerdown_requested) {
5783
                powerdown_requested = 0;
5784
                qemu_system_powerdown();
5785
                ret = EXCP_INTERRUPT;
5786
            }
5787
            if (ret == EXCP_DEBUG) {
5788
                vm_stop(EXCP_DEBUG);
5789
            }
5790
            /* if hlt instruction, we wait until the next IRQ */
5791
            /* XXX: use timeout computed from timers */
5792
            if (ret == EXCP_HLT)
5793
                timeout = 10;
5794
            else
5795
                timeout = 0;
5796
        } else {
5797
            timeout = 10;
5798
        }
5799
#ifdef CONFIG_PROFILER
5800
        ti = profile_getclock();
5801
#endif
5802
        main_loop_wait(timeout);
5803
#ifdef CONFIG_PROFILER
5804
        dev_time += profile_getclock() - ti;
5805
#endif
5806
    }
5807
    cpu_disable_ticks();
5808
    return ret;
5809
}
5810

    
5811
void help(void)
5812
{
5813
    printf("QEMU PC emulator version " QEMU_VERSION ", Copyright (c) 2003-2006 Fabrice Bellard\n"
5814
           "usage: %s [options] [disk_image]\n"
5815
           "\n"
5816
           "'disk_image' is a raw hard image image for IDE hard disk 0\n"
5817
           "\n"
5818
           "Standard options:\n"
5819
           "-M machine      select emulated machine (-M ? for list)\n"
5820
           "-fda/-fdb file  use 'file' as floppy disk 0/1 image\n"
5821
           "-hda/-hdb file  use 'file' as IDE hard disk 0/1 image\n"
5822
           "-hdc/-hdd file  use 'file' as IDE hard disk 2/3 image\n"
5823
           "-cdrom file     use 'file' as IDE cdrom image (cdrom is ide1 master)\n"
5824
           "-boot [a|c|d]   boot on floppy (a), hard disk (c) or CD-ROM (d)\n"
5825
           "-snapshot       write to temporary files instead of disk image files\n"
5826
#ifdef TARGET_I386
5827
           "-no-fd-bootchk  disable boot signature checking for floppy disks\n"
5828
#endif
5829
           "-m megs         set virtual RAM size to megs MB [default=%d]\n"
5830
           "-smp n          set the number of CPUs to 'n' [default=1]\n"
5831
           "-nographic      disable graphical output and redirect serial I/Os to console\n"
5832
#ifndef _WIN32
5833
           "-k language     use keyboard layout (for example \"fr\" for French)\n"
5834
#endif
5835
#ifdef HAS_AUDIO
5836
           "-audio-help     print list of audio drivers and their options\n"
5837
           "-soundhw c1,... enable audio support\n"
5838
           "                and only specified sound cards (comma separated list)\n"
5839
           "                use -soundhw ? to get the list of supported cards\n"
5840
           "                use -soundhw all to enable all of them\n"
5841
#endif
5842
           "-localtime      set the real time clock to local time [default=utc]\n"
5843
           "-full-screen    start in full screen\n"
5844
#ifdef TARGET_I386
5845
           "-win2k-hack     use it when installing Windows 2000 to avoid a disk full bug\n"
5846
#endif
5847
           "-usb            enable the USB driver (will be the default soon)\n"
5848
           "-usbdevice name add the host or guest USB device 'name'\n"
5849
#if defined(TARGET_PPC) || defined(TARGET_SPARC)
5850
           "-g WxH[xDEPTH]  Set the initial graphical resolution and depth\n"
5851
#endif
5852
           "\n"
5853
           "Network options:\n"
5854
           "-net nic[,vlan=n][,macaddr=addr][,model=type]\n"
5855
           "                create a new Network Interface Card and connect it to VLAN 'n'\n"
5856
#ifdef CONFIG_SLIRP
5857
           "-net user[,vlan=n][,hostname=host]\n"
5858
           "                connect the user mode network stack to VLAN 'n' and send\n"
5859
           "                hostname 'host' to DHCP clients\n"
5860
#endif
5861
#ifdef _WIN32
5862
           "-net tap[,vlan=n],ifname=name\n"
5863
           "                connect the host TAP network interface to VLAN 'n'\n"
5864
#else
5865
           "-net tap[,vlan=n][,fd=h][,ifname=name][,script=file]\n"
5866
           "                connect the host TAP network interface to VLAN 'n' and use\n"
5867
           "                the network script 'file' (default=%s);\n"
5868
           "                use 'fd=h' to connect to an already opened TAP interface\n"
5869
#endif
5870
           "-net socket[,vlan=n][,fd=h][,listen=[host]:port][,connect=host:port]\n"
5871
           "                connect the vlan 'n' to another VLAN using a socket connection\n"
5872
           "-net socket[,vlan=n][,fd=h][,mcast=maddr:port]\n"
5873
           "                connect the vlan 'n' to multicast maddr and port\n"
5874
           "-net none       use it alone to have zero network devices; if no -net option\n"
5875
           "                is provided, the default is '-net nic -net user'\n"
5876
           "\n"
5877
#ifdef CONFIG_SLIRP
5878
           "-tftp prefix    allow tftp access to files starting with prefix [-net user]\n"
5879
#ifndef _WIN32
5880
           "-smb dir        allow SMB access to files in 'dir' [-net user]\n"
5881
#endif
5882
           "-redir [tcp|udp]:host-port:[guest-host]:guest-port\n"
5883
           "                redirect TCP or UDP connections from host to guest [-net user]\n"
5884
#endif
5885
           "\n"
5886
           "Linux boot specific:\n"
5887
           "-kernel bzImage use 'bzImage' as kernel image\n"
5888
           "-append cmdline use 'cmdline' as kernel command line\n"
5889
           "-initrd file    use 'file' as initial ram disk\n"
5890
           "\n"
5891
           "Debug/Expert options:\n"
5892
           "-monitor dev    redirect the monitor to char device 'dev'\n"
5893
           "-serial dev     redirect the serial port to char device 'dev'\n"
5894
           "-parallel dev   redirect the parallel port to char device 'dev'\n"
5895
           "-pidfile file   Write PID to 'file'\n"
5896
           "-S              freeze CPU at startup (use 'c' to start execution)\n"
5897
           "-s              wait gdb connection to port %d\n"
5898
           "-p port         change gdb connection port\n"
5899
           "-d item1,...    output log to %s (use -d ? for a list of log items)\n"
5900
           "-hdachs c,h,s[,t]  force hard disk 0 physical geometry and the optional BIOS\n"
5901
           "                translation (t=none or lba) (usually qemu can guess them)\n"
5902
           "-L path         set the directory for the BIOS, VGA BIOS and keymaps\n"
5903
#ifdef USE_KQEMU
5904
           "-kernel-kqemu   enable KQEMU full virtualization (default is user mode only)\n"
5905
           "-no-kqemu       disable KQEMU kernel module usage\n"
5906
#endif
5907
#ifdef USE_CODE_COPY
5908
           "-no-code-copy   disable code copy acceleration\n"
5909
#endif
5910
#ifdef TARGET_I386
5911
           "-std-vga        simulate a standard VGA card with VESA Bochs Extensions\n"
5912
           "                (default is CL-GD5446 PCI VGA)\n"
5913
           "-no-acpi        disable ACPI\n"
5914
#endif
5915
           "-loadvm file    start right away with a saved state (loadvm in monitor)\n"
5916
           "-vnc display    start a VNC server on display\n"
5917
           "\n"
5918
           "During emulation, the following keys are useful:\n"
5919
           "ctrl-alt-f      toggle full screen\n"
5920
           "ctrl-alt-n      switch to virtual console 'n'\n"
5921
           "ctrl-alt        toggle mouse and keyboard grab\n"
5922
           "\n"
5923
           "When using -nographic, press 'ctrl-a h' to get some help.\n"
5924
           ,
5925
           "qemu",
5926
           DEFAULT_RAM_SIZE,
5927
#ifndef _WIN32
5928
           DEFAULT_NETWORK_SCRIPT,
5929
#endif
5930
           DEFAULT_GDBSTUB_PORT,
5931
           "/tmp/qemu.log");
5932
    exit(1);
5933
}
5934

    
5935
#define HAS_ARG 0x0001
5936

    
5937
enum {
5938
    QEMU_OPTION_h,
5939

    
5940
    QEMU_OPTION_M,
5941
    QEMU_OPTION_fda,
5942
    QEMU_OPTION_fdb,
5943
    QEMU_OPTION_hda,
5944
    QEMU_OPTION_hdb,
5945
    QEMU_OPTION_hdc,
5946
    QEMU_OPTION_hdd,
5947
    QEMU_OPTION_cdrom,
5948
    QEMU_OPTION_boot,
5949
    QEMU_OPTION_snapshot,
5950
#ifdef TARGET_I386
5951
    QEMU_OPTION_no_fd_bootchk,
5952
#endif
5953
    QEMU_OPTION_m,
5954
    QEMU_OPTION_nographic,
5955
#ifdef HAS_AUDIO
5956
    QEMU_OPTION_audio_help,
5957
    QEMU_OPTION_soundhw,
5958
#endif
5959

    
5960
    QEMU_OPTION_net,
5961
    QEMU_OPTION_tftp,
5962
    QEMU_OPTION_smb,
5963
    QEMU_OPTION_redir,
5964

    
5965
    QEMU_OPTION_kernel,
5966
    QEMU_OPTION_append,
5967
    QEMU_OPTION_initrd,
5968

    
5969
    QEMU_OPTION_S,
5970
    QEMU_OPTION_s,
5971
    QEMU_OPTION_p,
5972
    QEMU_OPTION_d,
5973
    QEMU_OPTION_hdachs,
5974
    QEMU_OPTION_L,
5975
    QEMU_OPTION_no_code_copy,
5976
    QEMU_OPTION_k,
5977
    QEMU_OPTION_localtime,
5978
    QEMU_OPTION_cirrusvga,
5979
    QEMU_OPTION_g,
5980
    QEMU_OPTION_std_vga,
5981
    QEMU_OPTION_monitor,
5982
    QEMU_OPTION_serial,
5983
    QEMU_OPTION_parallel,
5984
    QEMU_OPTION_loadvm,
5985
    QEMU_OPTION_full_screen,
5986
    QEMU_OPTION_pidfile,
5987
    QEMU_OPTION_no_kqemu,
5988
    QEMU_OPTION_kernel_kqemu,
5989
    QEMU_OPTION_win2k_hack,
5990
    QEMU_OPTION_usb,
5991
    QEMU_OPTION_usbdevice,
5992
    QEMU_OPTION_smp,
5993
    QEMU_OPTION_vnc,
5994
    QEMU_OPTION_no_acpi,
5995
};
5996

    
5997
typedef struct QEMUOption {
5998
    const char *name;
5999
    int flags;
6000
    int index;
6001
} QEMUOption;
6002

    
6003
const QEMUOption qemu_options[] = {
6004
    { "h", 0, QEMU_OPTION_h },
6005

    
6006
    { "M", HAS_ARG, QEMU_OPTION_M },
6007
    { "fda", HAS_ARG, QEMU_OPTION_fda },
6008
    { "fdb", HAS_ARG, QEMU_OPTION_fdb },
6009
    { "hda", HAS_ARG, QEMU_OPTION_hda },
6010
    { "hdb", HAS_ARG, QEMU_OPTION_hdb },
6011
    { "hdc", HAS_ARG, QEMU_OPTION_hdc },
6012
    { "hdd", HAS_ARG, QEMU_OPTION_hdd },
6013
    { "cdrom", HAS_ARG, QEMU_OPTION_cdrom },
6014
    { "boot", HAS_ARG, QEMU_OPTION_boot },
6015
    { "snapshot", 0, QEMU_OPTION_snapshot },
6016
#ifdef TARGET_I386
6017
    { "no-fd-bootchk", 0, QEMU_OPTION_no_fd_bootchk },
6018
#endif
6019
    { "m", HAS_ARG, QEMU_OPTION_m },
6020
    { "nographic", 0, QEMU_OPTION_nographic },
6021
    { "k", HAS_ARG, QEMU_OPTION_k },
6022
#ifdef HAS_AUDIO
6023
    { "audio-help", 0, QEMU_OPTION_audio_help },
6024
    { "soundhw", HAS_ARG, QEMU_OPTION_soundhw },
6025
#endif
6026

    
6027
    { "net", HAS_ARG, QEMU_OPTION_net},
6028
#ifdef CONFIG_SLIRP
6029
    { "tftp", HAS_ARG, QEMU_OPTION_tftp },
6030
#ifndef _WIN32
6031
    { "smb", HAS_ARG, QEMU_OPTION_smb },
6032
#endif
6033
    { "redir", HAS_ARG, QEMU_OPTION_redir },
6034
#endif
6035

    
6036
    { "kernel", HAS_ARG, QEMU_OPTION_kernel },
6037
    { "append", HAS_ARG, QEMU_OPTION_append },
6038
    { "initrd", HAS_ARG, QEMU_OPTION_initrd },
6039

    
6040
    { "S", 0, QEMU_OPTION_S },
6041
    { "s", 0, QEMU_OPTION_s },
6042
    { "p", HAS_ARG, QEMU_OPTION_p },
6043
    { "d", HAS_ARG, QEMU_OPTION_d },
6044
    { "hdachs", HAS_ARG, QEMU_OPTION_hdachs },
6045
    { "L", HAS_ARG, QEMU_OPTION_L },
6046
    { "no-code-copy", 0, QEMU_OPTION_no_code_copy },
6047
#ifdef USE_KQEMU
6048
    { "no-kqemu", 0, QEMU_OPTION_no_kqemu },
6049
    { "kernel-kqemu", 0, QEMU_OPTION_kernel_kqemu },
6050
#endif
6051
#if defined(TARGET_PPC) || defined(TARGET_SPARC)
6052
    { "g", 1, QEMU_OPTION_g },
6053
#endif
6054
    { "localtime", 0, QEMU_OPTION_localtime },
6055
    { "std-vga", 0, QEMU_OPTION_std_vga },
6056
    { "monitor", 1, QEMU_OPTION_monitor },
6057
    { "serial", 1, QEMU_OPTION_serial },
6058
    { "parallel", 1, QEMU_OPTION_parallel },
6059
    { "loadvm", HAS_ARG, QEMU_OPTION_loadvm },
6060
    { "full-screen", 0, QEMU_OPTION_full_screen },
6061
    { "pidfile", HAS_ARG, QEMU_OPTION_pidfile },
6062
    { "win2k-hack", 0, QEMU_OPTION_win2k_hack },
6063
    { "usbdevice", HAS_ARG, QEMU_OPTION_usbdevice },
6064
    { "smp", HAS_ARG, QEMU_OPTION_smp },
6065
    { "vnc", HAS_ARG, QEMU_OPTION_vnc },
6066
    
6067
    /* temporary options */
6068
    { "usb", 0, QEMU_OPTION_usb },
6069
    { "cirrusvga", 0, QEMU_OPTION_cirrusvga },
6070
    { "no-acpi", 0, QEMU_OPTION_no_acpi },
6071
    { NULL },
6072
};
6073

    
6074
#if defined (TARGET_I386) && defined(USE_CODE_COPY)
6075

    
6076
/* this stack is only used during signal handling */
6077
#define SIGNAL_STACK_SIZE 32768
6078

    
6079
static uint8_t *signal_stack;
6080

    
6081
#endif
6082

    
6083
/* password input */
6084

    
6085
static BlockDriverState *get_bdrv(int index)
6086
{
6087
    BlockDriverState *bs;
6088

    
6089
    if (index < 4) {
6090
        bs = bs_table[index];
6091
    } else if (index < 6) {
6092
        bs = fd_table[index - 4];
6093
    } else {
6094
        bs = NULL;
6095
    }
6096
    return bs;
6097
}
6098

    
6099
static void read_passwords(void)
6100
{
6101
    BlockDriverState *bs;
6102
    int i, j;
6103
    char password[256];
6104

    
6105
    for(i = 0; i < 6; i++) {
6106
        bs = get_bdrv(i);
6107
        if (bs && bdrv_is_encrypted(bs)) {
6108
            term_printf("%s is encrypted.\n", bdrv_get_device_name(bs));
6109
            for(j = 0; j < 3; j++) {
6110
                monitor_readline("Password: ", 
6111
                                 1, password, sizeof(password));
6112
                if (bdrv_set_key(bs, password) == 0)
6113
                    break;
6114
                term_printf("invalid password\n");
6115
            }
6116
        }
6117
    }
6118
}
6119

    
6120
/* XXX: currently we cannot use simultaneously different CPUs */
6121
void register_machines(void)
6122
{
6123
#if defined(TARGET_I386)
6124
    qemu_register_machine(&pc_machine);
6125
    qemu_register_machine(&isapc_machine);
6126
#elif defined(TARGET_PPC)
6127
    qemu_register_machine(&heathrow_machine);
6128
    qemu_register_machine(&core99_machine);
6129
    qemu_register_machine(&prep_machine);
6130
#elif defined(TARGET_MIPS)
6131
    qemu_register_machine(&mips_machine);
6132
#elif defined(TARGET_SPARC)
6133
#ifdef TARGET_SPARC64
6134
    qemu_register_machine(&sun4u_machine);
6135
#else
6136
    qemu_register_machine(&sun4m_machine);
6137
#endif
6138
#elif defined(TARGET_ARM)
6139
    qemu_register_machine(&integratorcp926_machine);
6140
    qemu_register_machine(&integratorcp1026_machine);
6141
    qemu_register_machine(&versatilepb_machine);
6142
    qemu_register_machine(&versatileab_machine);
6143
#elif defined(TARGET_SH4)
6144
    qemu_register_machine(&shix_machine);
6145
#else
6146
#error unsupported CPU
6147
#endif
6148
}
6149

    
6150
#ifdef HAS_AUDIO
6151
struct soundhw soundhw[] = {
6152
#ifdef TARGET_I386
6153
    {
6154
        "pcspk",
6155
        "PC speaker",
6156
        0,
6157
        1,
6158
        { .init_isa = pcspk_audio_init }
6159
    },
6160
#endif
6161
    {
6162
        "sb16",
6163
        "Creative Sound Blaster 16",
6164
        0,
6165
        1,
6166
        { .init_isa = SB16_init }
6167
    },
6168

    
6169
#ifdef CONFIG_ADLIB
6170
    {
6171
        "adlib",
6172
#ifdef HAS_YMF262
6173
        "Yamaha YMF262 (OPL3)",
6174
#else
6175
        "Yamaha YM3812 (OPL2)",
6176
#endif
6177
        0,
6178
        1,
6179
        { .init_isa = Adlib_init }
6180
    },
6181
#endif
6182

    
6183
#ifdef CONFIG_GUS
6184
    {
6185
        "gus",
6186
        "Gravis Ultrasound GF1",
6187
        0,
6188
        1,
6189
        { .init_isa = GUS_init }
6190
    },
6191
#endif
6192

    
6193
    {
6194
        "es1370",
6195
        "ENSONIQ AudioPCI ES1370",
6196
        0,
6197
        0,
6198
        { .init_pci = es1370_init }
6199
    },
6200

    
6201
    { NULL, NULL, 0, 0, { NULL } }
6202
};
6203

    
6204
static void select_soundhw (const char *optarg)
6205
{
6206
    struct soundhw *c;
6207

    
6208
    if (*optarg == '?') {
6209
    show_valid_cards:
6210

    
6211
        printf ("Valid sound card names (comma separated):\n");
6212
        for (c = soundhw; c->name; ++c) {
6213
            printf ("%-11s %s\n", c->name, c->descr);
6214
        }
6215
        printf ("\n-soundhw all will enable all of the above\n");
6216
        exit (*optarg != '?');
6217
    }
6218
    else {
6219
        size_t l;
6220
        const char *p;
6221
        char *e;
6222
        int bad_card = 0;
6223

    
6224
        if (!strcmp (optarg, "all")) {
6225
            for (c = soundhw; c->name; ++c) {
6226
                c->enabled = 1;
6227
            }
6228
            return;
6229
        }
6230

    
6231
        p = optarg;
6232
        while (*p) {
6233
            e = strchr (p, ',');
6234
            l = !e ? strlen (p) : (size_t) (e - p);
6235

    
6236
            for (c = soundhw; c->name; ++c) {
6237
                if (!strncmp (c->name, p, l)) {
6238
                    c->enabled = 1;
6239
                    break;
6240
                }
6241
            }
6242

    
6243
            if (!c->name) {
6244
                if (l > 80) {
6245
                    fprintf (stderr,
6246
                             "Unknown sound card name (too big to show)\n");
6247
                }
6248
                else {
6249
                    fprintf (stderr, "Unknown sound card name `%.*s'\n",
6250
                             (int) l, p);
6251
                }
6252
                bad_card = 1;
6253
            }
6254
            p += l + (e != NULL);
6255
        }
6256

    
6257
        if (bad_card)
6258
            goto show_valid_cards;
6259
    }
6260
}
6261
#endif
6262

    
6263
#ifdef _WIN32
6264
static BOOL WINAPI qemu_ctrl_handler(DWORD type)
6265
{
6266
    exit(STATUS_CONTROL_C_EXIT);
6267
    return TRUE;
6268
}
6269
#endif
6270

    
6271
#define MAX_NET_CLIENTS 32
6272

    
6273
int main(int argc, char **argv)
6274
{
6275
#ifdef CONFIG_GDBSTUB
6276
    int use_gdbstub, gdbstub_port;
6277
#endif
6278
    int i, cdrom_index;
6279
    int snapshot, linux_boot;
6280
    const char *initrd_filename;
6281
    const char *hd_filename[MAX_DISKS], *fd_filename[MAX_FD];
6282
    const char *kernel_filename, *kernel_cmdline;
6283
    DisplayState *ds = &display_state;
6284
    int cyls, heads, secs, translation;
6285
    int start_emulation = 1;
6286
    char net_clients[MAX_NET_CLIENTS][256];
6287
    int nb_net_clients;
6288
    int optind;
6289
    const char *r, *optarg;
6290
    CharDriverState *monitor_hd;
6291
    char monitor_device[128];
6292
    char serial_devices[MAX_SERIAL_PORTS][128];
6293
    int serial_device_index;
6294
    char parallel_devices[MAX_PARALLEL_PORTS][128];
6295
    int parallel_device_index;
6296
    const char *loadvm = NULL;
6297
    QEMUMachine *machine;
6298
    char usb_devices[MAX_USB_CMDLINE][128];
6299
    int usb_devices_index;
6300

    
6301
    LIST_INIT (&vm_change_state_head);
6302
#ifndef _WIN32
6303
    {
6304
        struct sigaction act;
6305
        sigfillset(&act.sa_mask);
6306
        act.sa_flags = 0;
6307
        act.sa_handler = SIG_IGN;
6308
        sigaction(SIGPIPE, &act, NULL);
6309
    }
6310
#else
6311
    SetConsoleCtrlHandler(qemu_ctrl_handler, TRUE);
6312
    /* Note: cpu_interrupt() is currently not SMP safe, so we force
6313
       QEMU to run on a single CPU */
6314
    {
6315
        HANDLE h;
6316
        DWORD mask, smask;
6317
        int i;
6318
        h = GetCurrentProcess();
6319
        if (GetProcessAffinityMask(h, &mask, &smask)) {
6320
            for(i = 0; i < 32; i++) {
6321
                if (mask & (1 << i))
6322
                    break;
6323
            }
6324
            if (i != 32) {
6325
                mask = 1 << i;
6326
                SetProcessAffinityMask(h, mask);
6327
            }
6328
        }
6329
    }
6330
#endif
6331

    
6332
    register_machines();
6333
    machine = first_machine;
6334
    initrd_filename = NULL;
6335
    for(i = 0; i < MAX_FD; i++)
6336
        fd_filename[i] = NULL;
6337
    for(i = 0; i < MAX_DISKS; i++)
6338
        hd_filename[i] = NULL;
6339
    ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
6340
    vga_ram_size = VGA_RAM_SIZE;
6341
    bios_size = BIOS_SIZE;
6342
#ifdef CONFIG_GDBSTUB
6343
    use_gdbstub = 0;
6344
    gdbstub_port = DEFAULT_GDBSTUB_PORT;
6345
#endif
6346
    snapshot = 0;
6347
    nographic = 0;
6348
    kernel_filename = NULL;
6349
    kernel_cmdline = "";
6350
#ifdef TARGET_PPC
6351
    cdrom_index = 1;
6352
#else
6353
    cdrom_index = 2;
6354
#endif
6355
    cyls = heads = secs = 0;
6356
    translation = BIOS_ATA_TRANSLATION_AUTO;
6357
    pstrcpy(monitor_device, sizeof(monitor_device), "vc");
6358

    
6359
    pstrcpy(serial_devices[0], sizeof(serial_devices[0]), "vc");
6360
    for(i = 1; i < MAX_SERIAL_PORTS; i++)
6361
        serial_devices[i][0] = '\0';
6362
    serial_device_index = 0;
6363
    
6364
    pstrcpy(parallel_devices[0], sizeof(parallel_devices[0]), "vc");
6365
    for(i = 1; i < MAX_PARALLEL_PORTS; i++)
6366
        parallel_devices[i][0] = '\0';
6367
    parallel_device_index = 0;
6368
    
6369
    usb_devices_index = 0;
6370
    
6371
    nb_net_clients = 0;
6372

    
6373
    nb_nics = 0;
6374
    /* default mac address of the first network interface */
6375
    
6376
    optind = 1;
6377
    for(;;) {
6378
        if (optind >= argc)
6379
            break;
6380
        r = argv[optind];
6381
        if (r[0] != '-') {
6382
            hd_filename[0] = argv[optind++];
6383
        } else {
6384
            const QEMUOption *popt;
6385

    
6386
            optind++;
6387
            popt = qemu_options;
6388
            for(;;) {
6389
                if (!popt->name) {
6390
                    fprintf(stderr, "%s: invalid option -- '%s'\n", 
6391
                            argv[0], r);
6392
                    exit(1);
6393
                }
6394
                if (!strcmp(popt->name, r + 1))
6395
                    break;
6396
                popt++;
6397
            }
6398
            if (popt->flags & HAS_ARG) {
6399
                if (optind >= argc) {
6400
                    fprintf(stderr, "%s: option '%s' requires an argument\n",
6401
                            argv[0], r);
6402
                    exit(1);
6403
                }
6404
                optarg = argv[optind++];
6405
            } else {
6406
                optarg = NULL;
6407
            }
6408

    
6409
            switch(popt->index) {
6410
            case QEMU_OPTION_M:
6411
                machine = find_machine(optarg);
6412
                if (!machine) {
6413
                    QEMUMachine *m;
6414
                    printf("Supported machines are:\n");
6415
                    for(m = first_machine; m != NULL; m = m->next) {
6416
                        printf("%-10s %s%s\n",
6417
                               m->name, m->desc, 
6418
                               m == first_machine ? " (default)" : "");
6419
                    }
6420
                    exit(1);
6421
                }
6422
                break;
6423
            case QEMU_OPTION_initrd:
6424
                initrd_filename = optarg;
6425
                break;
6426
            case QEMU_OPTION_hda:
6427
            case QEMU_OPTION_hdb:
6428
            case QEMU_OPTION_hdc:
6429
            case QEMU_OPTION_hdd:
6430
                {
6431
                    int hd_index;
6432
                    hd_index = popt->index - QEMU_OPTION_hda;
6433
                    hd_filename[hd_index] = optarg;
6434
                    if (hd_index == cdrom_index)
6435
                        cdrom_index = -1;
6436
                }
6437
                break;
6438
            case QEMU_OPTION_snapshot:
6439
                snapshot = 1;
6440
                break;
6441
            case QEMU_OPTION_hdachs:
6442
                {
6443
                    const char *p;
6444
                    p = optarg;
6445
                    cyls = strtol(p, (char **)&p, 0);
6446
                    if (cyls < 1 || cyls > 16383)
6447
                        goto chs_fail;
6448
                    if (*p != ',')
6449
                        goto chs_fail;
6450
                    p++;
6451
                    heads = strtol(p, (char **)&p, 0);
6452
                    if (heads < 1 || heads > 16)
6453
                        goto chs_fail;
6454
                    if (*p != ',')
6455
                        goto chs_fail;
6456
                    p++;
6457
                    secs = strtol(p, (char **)&p, 0);
6458
                    if (secs < 1 || secs > 63)
6459
                        goto chs_fail;
6460
                    if (*p == ',') {
6461
                        p++;
6462
                        if (!strcmp(p, "none"))
6463
                            translation = BIOS_ATA_TRANSLATION_NONE;
6464
                        else if (!strcmp(p, "lba"))
6465
                            translation = BIOS_ATA_TRANSLATION_LBA;
6466
                        else if (!strcmp(p, "auto"))
6467
                            translation = BIOS_ATA_TRANSLATION_AUTO;
6468
                        else
6469
                            goto chs_fail;
6470
                    } else if (*p != '\0') {
6471
                    chs_fail:
6472
                        fprintf(stderr, "qemu: invalid physical CHS format\n");
6473
                        exit(1);
6474
                    }
6475
                }
6476
                break;
6477
            case QEMU_OPTION_nographic:
6478
                pstrcpy(monitor_device, sizeof(monitor_device), "stdio");
6479
                pstrcpy(serial_devices[0], sizeof(serial_devices[0]), "stdio");
6480
                nographic = 1;
6481
                break;
6482
            case QEMU_OPTION_kernel:
6483
                kernel_filename = optarg;
6484
                break;
6485
            case QEMU_OPTION_append:
6486
                kernel_cmdline = optarg;
6487
                break;
6488
            case QEMU_OPTION_cdrom:
6489
                if (cdrom_index >= 0) {
6490
                    hd_filename[cdrom_index] = optarg;
6491
                }
6492
                break;
6493
            case QEMU_OPTION_boot:
6494
                boot_device = optarg[0];
6495
                if (boot_device != 'a' && 
6496
#ifdef TARGET_SPARC
6497
                    // Network boot
6498
                    boot_device != 'n' &&
6499
#endif
6500
                    boot_device != 'c' && boot_device != 'd') {
6501
                    fprintf(stderr, "qemu: invalid boot device '%c'\n", boot_device);
6502
                    exit(1);
6503
                }
6504
                break;
6505
            case QEMU_OPTION_fda:
6506
                fd_filename[0] = optarg;
6507
                break;
6508
            case QEMU_OPTION_fdb:
6509
                fd_filename[1] = optarg;
6510
                break;
6511
#ifdef TARGET_I386
6512
            case QEMU_OPTION_no_fd_bootchk:
6513
                fd_bootchk = 0;
6514
                break;
6515
#endif
6516
            case QEMU_OPTION_no_code_copy:
6517
                code_copy_enabled = 0;
6518
                break;
6519
            case QEMU_OPTION_net:
6520
                if (nb_net_clients >= MAX_NET_CLIENTS) {
6521
                    fprintf(stderr, "qemu: too many network clients\n");
6522
                    exit(1);
6523
                }
6524
                pstrcpy(net_clients[nb_net_clients],
6525
                        sizeof(net_clients[0]),
6526
                        optarg);
6527
                nb_net_clients++;
6528
                break;
6529
#ifdef CONFIG_SLIRP
6530
            case QEMU_OPTION_tftp:
6531
                tftp_prefix = optarg;
6532
                break;
6533
#ifndef _WIN32
6534
            case QEMU_OPTION_smb:
6535
                net_slirp_smb(optarg);
6536
                break;
6537
#endif
6538
            case QEMU_OPTION_redir:
6539
                net_slirp_redir(optarg);                
6540
                break;
6541
#endif
6542
#ifdef HAS_AUDIO
6543
            case QEMU_OPTION_audio_help:
6544
                AUD_help ();
6545
                exit (0);
6546
                break;
6547
            case QEMU_OPTION_soundhw:
6548
                select_soundhw (optarg);
6549
                break;
6550
#endif
6551
            case QEMU_OPTION_h:
6552
                help();
6553
                break;
6554
            case QEMU_OPTION_m:
6555
                ram_size = atoi(optarg) * 1024 * 1024;
6556
                if (ram_size <= 0)
6557
                    help();
6558
                if (ram_size > PHYS_RAM_MAX_SIZE) {
6559
                    fprintf(stderr, "qemu: at most %d MB RAM can be simulated\n",
6560
                            PHYS_RAM_MAX_SIZE / (1024 * 1024));
6561
                    exit(1);
6562
                }
6563
                break;
6564
            case QEMU_OPTION_d:
6565
                {
6566
                    int mask;
6567
                    CPULogItem *item;
6568
                    
6569
                    mask = cpu_str_to_log_mask(optarg);
6570
                    if (!mask) {
6571
                        printf("Log items (comma separated):\n");
6572
                    for(item = cpu_log_items; item->mask != 0; item++) {
6573
                        printf("%-10s %s\n", item->name, item->help);
6574
                    }
6575
                    exit(1);
6576
                    }
6577
                    cpu_set_log(mask);
6578
                }
6579
                break;
6580
#ifdef CONFIG_GDBSTUB
6581
            case QEMU_OPTION_s:
6582
                use_gdbstub = 1;
6583
                break;
6584
            case QEMU_OPTION_p:
6585
                gdbstub_port = atoi(optarg);
6586
                break;
6587
#endif
6588
            case QEMU_OPTION_L:
6589
                bios_dir = optarg;
6590
                break;
6591
            case QEMU_OPTION_S:
6592
                start_emulation = 0;
6593
                break;
6594
            case QEMU_OPTION_k:
6595
                keyboard_layout = optarg;
6596
                break;
6597
            case QEMU_OPTION_localtime:
6598
                rtc_utc = 0;
6599
                break;
6600
            case QEMU_OPTION_cirrusvga:
6601
                cirrus_vga_enabled = 1;
6602
                break;
6603
            case QEMU_OPTION_std_vga:
6604
                cirrus_vga_enabled = 0;
6605
                break;
6606
            case QEMU_OPTION_g:
6607
                {
6608
                    const char *p;
6609
                    int w, h, depth;
6610
                    p = optarg;
6611
                    w = strtol(p, (char **)&p, 10);
6612
                    if (w <= 0) {
6613
                    graphic_error:
6614
                        fprintf(stderr, "qemu: invalid resolution or depth\n");
6615
                        exit(1);
6616
                    }
6617
                    if (*p != 'x')
6618
                        goto graphic_error;
6619
                    p++;
6620
                    h = strtol(p, (char **)&p, 10);
6621
                    if (h <= 0)
6622
                        goto graphic_error;
6623
                    if (*p == 'x') {
6624
                        p++;
6625
                        depth = strtol(p, (char **)&p, 10);
6626
                        if (depth != 8 && depth != 15 && depth != 16 && 
6627
                            depth != 24 && depth != 32)
6628
                            goto graphic_error;
6629
                    } else if (*p == '\0') {
6630
                        depth = graphic_depth;
6631
                    } else {
6632
                        goto graphic_error;
6633
                    }
6634
                    
6635
                    graphic_width = w;
6636
                    graphic_height = h;
6637
                    graphic_depth = depth;
6638
                }
6639
                break;
6640
            case QEMU_OPTION_monitor:
6641
                pstrcpy(monitor_device, sizeof(monitor_device), optarg);
6642
                break;
6643
            case QEMU_OPTION_serial:
6644
                if (serial_device_index >= MAX_SERIAL_PORTS) {
6645
                    fprintf(stderr, "qemu: too many serial ports\n");
6646
                    exit(1);
6647
                }
6648
                pstrcpy(serial_devices[serial_device_index], 
6649
                        sizeof(serial_devices[0]), optarg);
6650
                serial_device_index++;
6651
                break;
6652
            case QEMU_OPTION_parallel:
6653
                if (parallel_device_index >= MAX_PARALLEL_PORTS) {
6654
                    fprintf(stderr, "qemu: too many parallel ports\n");
6655
                    exit(1);
6656
                }
6657
                pstrcpy(parallel_devices[parallel_device_index], 
6658
                        sizeof(parallel_devices[0]), optarg);
6659
                parallel_device_index++;
6660
                break;
6661
            case QEMU_OPTION_loadvm:
6662
                loadvm = optarg;
6663
                break;
6664
            case QEMU_OPTION_full_screen:
6665
                full_screen = 1;
6666
                break;
6667
            case QEMU_OPTION_pidfile:
6668
                create_pidfile(optarg);
6669
                break;
6670
#ifdef TARGET_I386
6671
            case QEMU_OPTION_win2k_hack:
6672
                win2k_install_hack = 1;
6673
                break;
6674
#endif
6675
#ifdef USE_KQEMU
6676
            case QEMU_OPTION_no_kqemu:
6677
                kqemu_allowed = 0;
6678
                break;
6679
            case QEMU_OPTION_kernel_kqemu:
6680
                kqemu_allowed = 2;
6681
                break;
6682
#endif
6683
            case QEMU_OPTION_usb:
6684
                usb_enabled = 1;
6685
                break;
6686
            case QEMU_OPTION_usbdevice:
6687
                usb_enabled = 1;
6688
                if (usb_devices_index >= MAX_USB_CMDLINE) {
6689
                    fprintf(stderr, "Too many USB devices\n");
6690
                    exit(1);
6691
                }
6692
                pstrcpy(usb_devices[usb_devices_index],
6693
                        sizeof(usb_devices[usb_devices_index]),
6694
                        optarg);
6695
                usb_devices_index++;
6696
                break;
6697
            case QEMU_OPTION_smp:
6698
                smp_cpus = atoi(optarg);
6699
                if (smp_cpus < 1 || smp_cpus > MAX_CPUS) {
6700
                    fprintf(stderr, "Invalid number of CPUs\n");
6701
                    exit(1);
6702
                }
6703
                break;
6704
            case QEMU_OPTION_vnc:
6705
                vnc_display = atoi(optarg);
6706
                if (vnc_display < 0) {
6707
                    fprintf(stderr, "Invalid VNC display\n");
6708
                    exit(1);
6709
                }
6710
                break;
6711
            case QEMU_OPTION_no_acpi:
6712
                acpi_enabled = 0;
6713
                break;
6714
            }
6715
        }
6716
    }
6717

    
6718
#ifdef USE_KQEMU
6719
    if (smp_cpus > 1)
6720
        kqemu_allowed = 0;
6721
#endif
6722
    linux_boot = (kernel_filename != NULL);
6723
        
6724
    if (!linux_boot && 
6725
        hd_filename[0] == '\0' && 
6726
        (cdrom_index >= 0 && hd_filename[cdrom_index] == '\0') &&
6727
        fd_filename[0] == '\0')
6728
        help();
6729
    
6730
    /* boot to cd by default if no hard disk */
6731
    if (hd_filename[0] == '\0' && boot_device == 'c') {
6732
        if (fd_filename[0] != '\0')
6733
            boot_device = 'a';
6734
        else
6735
            boot_device = 'd';
6736
    }
6737

    
6738
    setvbuf(stdout, NULL, _IOLBF, 0);
6739
    
6740
    init_timers();
6741
    init_timer_alarm();
6742
    qemu_aio_init();
6743

    
6744
#ifdef _WIN32
6745
    socket_init();
6746
#endif
6747

    
6748
    /* init network clients */
6749
    if (nb_net_clients == 0) {
6750
        /* if no clients, we use a default config */
6751
        pstrcpy(net_clients[0], sizeof(net_clients[0]),
6752
                "nic");
6753
        pstrcpy(net_clients[1], sizeof(net_clients[0]),
6754
                "user");
6755
        nb_net_clients = 2;
6756
    }
6757

    
6758
    for(i = 0;i < nb_net_clients; i++) {
6759
        if (net_client_init(net_clients[i]) < 0)
6760
            exit(1);
6761
    }
6762

    
6763
    /* init the memory */
6764
    phys_ram_size = ram_size + vga_ram_size + bios_size;
6765

    
6766
    phys_ram_base = qemu_vmalloc(phys_ram_size);
6767
    if (!phys_ram_base) {
6768
        fprintf(stderr, "Could not allocate physical memory\n");
6769
        exit(1);
6770
    }
6771

    
6772
    /* we always create the cdrom drive, even if no disk is there */
6773
    bdrv_init();
6774
    if (cdrom_index >= 0) {
6775
        bs_table[cdrom_index] = bdrv_new("cdrom");
6776
        bdrv_set_type_hint(bs_table[cdrom_index], BDRV_TYPE_CDROM);
6777
    }
6778

    
6779
    /* open the virtual block devices */
6780
    for(i = 0; i < MAX_DISKS; i++) {
6781
        if (hd_filename[i]) {
6782
            if (!bs_table[i]) {
6783
                char buf[64];
6784
                snprintf(buf, sizeof(buf), "hd%c", i + 'a');
6785
                bs_table[i] = bdrv_new(buf);
6786
            }
6787
            if (bdrv_open(bs_table[i], hd_filename[i], snapshot ? BDRV_O_SNAPSHOT : 0) < 0) {
6788
                fprintf(stderr, "qemu: could not open hard disk image '%s'\n",
6789
                        hd_filename[i]);
6790
                exit(1);
6791
            }
6792
            if (i == 0 && cyls != 0) {
6793
                bdrv_set_geometry_hint(bs_table[i], cyls, heads, secs);
6794
                bdrv_set_translation_hint(bs_table[i], translation);
6795
            }
6796
        }
6797
    }
6798

    
6799
    /* we always create at least one floppy disk */
6800
    fd_table[0] = bdrv_new("fda");
6801
    bdrv_set_type_hint(fd_table[0], BDRV_TYPE_FLOPPY);
6802

    
6803
    for(i = 0; i < MAX_FD; i++) {
6804
        if (fd_filename[i]) {
6805
            if (!fd_table[i]) {
6806
                char buf[64];
6807
                snprintf(buf, sizeof(buf), "fd%c", i + 'a');
6808
                fd_table[i] = bdrv_new(buf);
6809
                bdrv_set_type_hint(fd_table[i], BDRV_TYPE_FLOPPY);
6810
            }
6811
            if (fd_filename[i] != '\0') {
6812
                if (bdrv_open(fd_table[i], fd_filename[i],
6813
                              snapshot ? BDRV_O_SNAPSHOT : 0) < 0) {
6814
                    fprintf(stderr, "qemu: could not open floppy disk image '%s'\n",
6815
                            fd_filename[i]);
6816
                    exit(1);
6817
                }
6818
            }
6819
        }
6820
    }
6821

    
6822
    register_savevm("timer", 0, 2, timer_save, timer_load, NULL);
6823
    register_savevm("ram", 0, 2, ram_save, ram_load, NULL);
6824

    
6825
    init_ioports();
6826

    
6827
    /* terminal init */
6828
    if (nographic) {
6829
        dumb_display_init(ds);
6830
    } else if (vnc_display != -1) {
6831
        vnc_display_init(ds, vnc_display);
6832
    } else {
6833
#if defined(CONFIG_SDL)
6834
        sdl_display_init(ds, full_screen);
6835
#elif defined(CONFIG_COCOA)
6836
        cocoa_display_init(ds, full_screen);
6837
#else
6838
        dumb_display_init(ds);
6839
#endif
6840
    }
6841

    
6842
    monitor_hd = qemu_chr_open(monitor_device);
6843
    if (!monitor_hd) {
6844
        fprintf(stderr, "qemu: could not open monitor device '%s'\n", monitor_device);
6845
        exit(1);
6846
    }
6847
    monitor_init(monitor_hd, !nographic);
6848

    
6849
    for(i = 0; i < MAX_SERIAL_PORTS; i++) {
6850
        if (serial_devices[i][0] != '\0') {
6851
            serial_hds[i] = qemu_chr_open(serial_devices[i]);
6852
            if (!serial_hds[i]) {
6853
                fprintf(stderr, "qemu: could not open serial device '%s'\n", 
6854
                        serial_devices[i]);
6855
                exit(1);
6856
            }
6857
            if (!strcmp(serial_devices[i], "vc"))
6858
                qemu_chr_printf(serial_hds[i], "serial%d console\r\n", i);
6859
        }
6860
    }
6861

    
6862
    for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
6863
        if (parallel_devices[i][0] != '\0') {
6864
            parallel_hds[i] = qemu_chr_open(parallel_devices[i]);
6865
            if (!parallel_hds[i]) {
6866
                fprintf(stderr, "qemu: could not open parallel device '%s'\n", 
6867
                        parallel_devices[i]);
6868
                exit(1);
6869
            }
6870
            if (!strcmp(parallel_devices[i], "vc"))
6871
                qemu_chr_printf(parallel_hds[i], "parallel%d console\r\n", i);
6872
        }
6873
    }
6874

    
6875
    machine->init(ram_size, vga_ram_size, boot_device,
6876
                  ds, fd_filename, snapshot,
6877
                  kernel_filename, kernel_cmdline, initrd_filename);
6878

    
6879
    /* init USB devices */
6880
    if (usb_enabled) {
6881
        for(i = 0; i < usb_devices_index; i++) {
6882
            if (usb_device_add(usb_devices[i]) < 0) {
6883
                fprintf(stderr, "Warning: could not add USB device %s\n",
6884
                        usb_devices[i]);
6885
            }
6886
        }
6887
    }
6888

    
6889
    gui_timer = qemu_new_timer(rt_clock, gui_update, NULL);
6890
    qemu_mod_timer(gui_timer, qemu_get_clock(rt_clock));
6891

    
6892
#ifdef CONFIG_GDBSTUB
6893
    if (use_gdbstub) {
6894
        if (gdbserver_start(gdbstub_port) < 0) {
6895
            fprintf(stderr, "Could not open gdbserver socket on port %d\n", 
6896
                    gdbstub_port);
6897
            exit(1);
6898
        } else {
6899
            printf("Waiting gdb connection on port %d\n", gdbstub_port);
6900
        }
6901
    } else 
6902
#endif
6903
    if (loadvm)
6904
        do_loadvm(loadvm);
6905

    
6906
    {
6907
        /* XXX: simplify init */
6908
        read_passwords();
6909
        if (start_emulation) {
6910
            vm_start();
6911
        }
6912
    }
6913
    main_loop();
6914
    quit_timers();
6915
    return 0;
6916
}