Statistics
| Branch: | Revision:

root / vl.c @ 50d3eeae

History | View | Annotate | Download (194.7 kB)

1
/*
2
 * QEMU System Emulator
3
 * 
4
 * Copyright (c) 2003-2007 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
#include <linux/parport.h>
59
#else
60
#include <sys/stat.h>
61
#include <sys/ethernet.h>
62
#include <sys/sockio.h>
63
#include <arpa/inet.h>
64
#include <netinet/arp.h>
65
#include <netinet/in.h>
66
#include <netinet/in_systm.h>
67
#include <netinet/ip.h>
68
#include <netinet/ip_icmp.h> // must come after ip.h
69
#include <netinet/udp.h>
70
#include <netinet/tcp.h>
71
#include <net/if.h>
72
#include <syslog.h>
73
#include <stropts.h>
74
#endif
75
#endif
76
#endif
77

    
78
#if defined(CONFIG_SLIRP)
79
#include "libslirp.h"
80
#endif
81

    
82
#ifdef _WIN32
83
#include <malloc.h>
84
#include <sys/timeb.h>
85
#include <windows.h>
86
#define getopt_long_only getopt_long
87
#define memalign(align, size) malloc(size)
88
#endif
89

    
90
#include "qemu_socket.h"
91

    
92
#ifdef CONFIG_SDL
93
#ifdef __APPLE__
94
#include <SDL/SDL.h>
95
#endif
96
#endif /* CONFIG_SDL */
97

    
98
#ifdef CONFIG_COCOA
99
#undef main
100
#define main qemu_main
101
#endif /* CONFIG_COCOA */
102

    
103
#include "disas.h"
104

    
105
#include "exec-all.h"
106

    
107
#define DEFAULT_NETWORK_SCRIPT "/etc/qemu-ifup"
108
#ifdef __sun__
109
#define SMBD_COMMAND "/usr/sfw/sbin/smbd"
110
#else
111
#define SMBD_COMMAND "/usr/sbin/smbd"
112
#endif
113

    
114
//#define DEBUG_UNUSED_IOPORT
115
//#define DEBUG_IOPORT
116

    
117
#define PHYS_RAM_MAX_SIZE (2047 * 1024 * 1024)
118

    
119
#ifdef TARGET_PPC
120
#define DEFAULT_RAM_SIZE 144
121
#else
122
#define DEFAULT_RAM_SIZE 128
123
#endif
124
/* in ms */
125
#define GUI_REFRESH_INTERVAL 30
126

    
127
/* Max number of USB devices that can be specified on the commandline.  */
128
#define MAX_USB_CMDLINE 8
129

    
130
/* XXX: use a two level table to limit memory usage */
131
#define MAX_IOPORTS 65536
132

    
133
const char *bios_dir = CONFIG_QEMU_SHAREDIR;
134
char phys_ram_file[1024];
135
void *ioport_opaque[MAX_IOPORTS];
136
IOPortReadFunc *ioport_read_table[3][MAX_IOPORTS];
137
IOPortWriteFunc *ioport_write_table[3][MAX_IOPORTS];
138
/* Note: bs_table[MAX_DISKS] is a dummy block driver if none available
139
   to store the VM snapshots */
140
BlockDriverState *bs_table[MAX_DISKS + 1], *fd_table[MAX_FD];
141
/* point to the block driver where the snapshots are managed */
142
BlockDriverState *bs_snapshots;
143
int vga_ram_size;
144
static DisplayState display_state;
145
int nographic;
146
const char* keyboard_layout = NULL;
147
int64_t ticks_per_sec;
148
int boot_device = 'c';
149
int ram_size;
150
int pit_min_timer_count = 0;
151
int nb_nics;
152
NICInfo nd_table[MAX_NICS];
153
QEMUTimer *gui_timer;
154
int vm_running;
155
int rtc_utc = 1;
156
int cirrus_vga_enabled = 1;
157
#ifdef TARGET_SPARC
158
int graphic_width = 1024;
159
int graphic_height = 768;
160
#else
161
int graphic_width = 800;
162
int graphic_height = 600;
163
#endif
164
int graphic_depth = 15;
165
int full_screen = 0;
166
int no_frame = 0;
167
int no_quit = 0;
168
CharDriverState *serial_hds[MAX_SERIAL_PORTS];
169
CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
170
#ifdef TARGET_I386
171
int win2k_install_hack = 0;
172
#endif
173
int usb_enabled = 0;
174
static VLANState *first_vlan;
175
int smp_cpus = 1;
176
const char *vnc_display;
177
#if defined(TARGET_SPARC)
178
#define MAX_CPUS 16
179
#elif defined(TARGET_I386)
180
#define MAX_CPUS 255
181
#else
182
#define MAX_CPUS 1
183
#endif
184
int acpi_enabled = 1;
185
int fd_bootchk = 1;
186
int no_reboot = 0;
187
int daemonize = 0;
188
const char *option_rom[MAX_OPTION_ROMS];
189
int nb_option_roms;
190
int semihosting_enabled = 0;
191
int autostart = 1;
192
const char *qemu_name;
193

    
194
/***********************************************************/
195
/* x86 ISA bus support */
196

    
197
target_phys_addr_t isa_mem_base = 0;
198
PicState2 *isa_pic;
199

    
200
uint32_t default_ioport_readb(void *opaque, uint32_t address)
201
{
202
#ifdef DEBUG_UNUSED_IOPORT
203
    fprintf(stderr, "unused inb: port=0x%04x\n", address);
204
#endif
205
    return 0xff;
206
}
207

    
208
void default_ioport_writeb(void *opaque, uint32_t address, uint32_t data)
209
{
210
#ifdef DEBUG_UNUSED_IOPORT
211
    fprintf(stderr, "unused outb: port=0x%04x data=0x%02x\n", address, data);
212
#endif
213
}
214

    
215
/* default is to make two byte accesses */
216
uint32_t default_ioport_readw(void *opaque, uint32_t address)
217
{
218
    uint32_t data;
219
    data = ioport_read_table[0][address](ioport_opaque[address], address);
220
    address = (address + 1) & (MAX_IOPORTS - 1);
221
    data |= ioport_read_table[0][address](ioport_opaque[address], address) << 8;
222
    return data;
223
}
224

    
225
void default_ioport_writew(void *opaque, uint32_t address, uint32_t data)
226
{
227
    ioport_write_table[0][address](ioport_opaque[address], address, data & 0xff);
228
    address = (address + 1) & (MAX_IOPORTS - 1);
229
    ioport_write_table[0][address](ioport_opaque[address], address, (data >> 8) & 0xff);
230
}
231

    
232
uint32_t default_ioport_readl(void *opaque, uint32_t address)
233
{
234
#ifdef DEBUG_UNUSED_IOPORT
235
    fprintf(stderr, "unused inl: port=0x%04x\n", address);
236
#endif
237
    return 0xffffffff;
238
}
239

    
240
void default_ioport_writel(void *opaque, uint32_t address, uint32_t data)
241
{
242
#ifdef DEBUG_UNUSED_IOPORT
243
    fprintf(stderr, "unused outl: port=0x%04x data=0x%02x\n", address, data);
244
#endif
245
}
246

    
247
void init_ioports(void)
248
{
249
    int i;
250

    
251
    for(i = 0; i < MAX_IOPORTS; i++) {
252
        ioport_read_table[0][i] = default_ioport_readb;
253
        ioport_write_table[0][i] = default_ioport_writeb;
254
        ioport_read_table[1][i] = default_ioport_readw;
255
        ioport_write_table[1][i] = default_ioport_writew;
256
        ioport_read_table[2][i] = default_ioport_readl;
257
        ioport_write_table[2][i] = default_ioport_writel;
258
    }
259
}
260

    
261
/* size is the word size in byte */
262
int register_ioport_read(int start, int length, int size, 
263
                         IOPortReadFunc *func, void *opaque)
264
{
265
    int i, bsize;
266

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

    
286
/* size is the word size in byte */
287
int register_ioport_write(int start, int length, int size, 
288
                          IOPortWriteFunc *func, void *opaque)
289
{
290
    int i, bsize;
291

    
292
    if (size == 1) {
293
        bsize = 0;
294
    } else if (size == 2) {
295
        bsize = 1;
296
    } else if (size == 4) {
297
        bsize = 2;
298
    } else {
299
        hw_error("register_ioport_write: invalid size");
300
        return -1;
301
    }
302
    for(i = start; i < start + length; i += size) {
303
        ioport_write_table[bsize][i] = func;
304
        if (ioport_opaque[i] != NULL && ioport_opaque[i] != opaque)
305
            hw_error("register_ioport_write: invalid opaque");
306
        ioport_opaque[i] = opaque;
307
    }
308
    return 0;
309
}
310

    
311
void isa_unassign_ioport(int start, int length)
312
{
313
    int i;
314

    
315
    for(i = start; i < start + length; i++) {
316
        ioport_read_table[0][i] = default_ioport_readb;
317
        ioport_read_table[1][i] = default_ioport_readw;
318
        ioport_read_table[2][i] = default_ioport_readl;
319

    
320
        ioport_write_table[0][i] = default_ioport_writeb;
321
        ioport_write_table[1][i] = default_ioport_writew;
322
        ioport_write_table[2][i] = default_ioport_writel;
323
    }
324
}
325

    
326
/***********************************************************/
327

    
328
void cpu_outb(CPUState *env, int addr, int val)
329
{
330
#ifdef DEBUG_IOPORT
331
    if (loglevel & CPU_LOG_IOPORT)
332
        fprintf(logfile, "outb: %04x %02x\n", addr, val);
333
#endif    
334
    ioport_write_table[0][addr](ioport_opaque[addr], addr, val);
335
#ifdef USE_KQEMU
336
    if (env)
337
        env->last_io_time = cpu_get_time_fast();
338
#endif
339
}
340

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

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

    
367
int cpu_inb(CPUState *env, int addr)
368
{
369
    int val;
370
    val = ioport_read_table[0][addr](ioport_opaque[addr], addr);
371
#ifdef DEBUG_IOPORT
372
    if (loglevel & CPU_LOG_IOPORT)
373
        fprintf(logfile, "inb : %04x %02x\n", addr, val);
374
#endif
375
#ifdef USE_KQEMU
376
    if (env)
377
        env->last_io_time = cpu_get_time_fast();
378
#endif
379
    return val;
380
}
381

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

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

    
412
/***********************************************************/
413
void hw_error(const char *fmt, ...)
414
{
415
    va_list ap;
416
    CPUState *env;
417

    
418
    va_start(ap, fmt);
419
    fprintf(stderr, "qemu: hardware error: ");
420
    vfprintf(stderr, fmt, ap);
421
    fprintf(stderr, "\n");
422
    for(env = first_cpu; env != NULL; env = env->next_cpu) {
423
        fprintf(stderr, "CPU #%d:\n", env->cpu_index);
424
#ifdef TARGET_I386
425
        cpu_dump_state(env, stderr, fprintf, X86_DUMP_FPU);
426
#else
427
        cpu_dump_state(env, stderr, fprintf, 0);
428
#endif
429
    }
430
    va_end(ap);
431
    abort();
432
}
433

    
434
/***********************************************************/
435
/* keyboard/mouse */
436

    
437
static QEMUPutKBDEvent *qemu_put_kbd_event;
438
static void *qemu_put_kbd_event_opaque;
439
static QEMUPutMouseEntry *qemu_put_mouse_event_head;
440
static QEMUPutMouseEntry *qemu_put_mouse_event_current;
441

    
442
void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
443
{
444
    qemu_put_kbd_event_opaque = opaque;
445
    qemu_put_kbd_event = func;
446
}
447

    
448
QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
449
                                                void *opaque, int absolute,
450
                                                const char *name)
451
{
452
    QEMUPutMouseEntry *s, *cursor;
453

    
454
    s = qemu_mallocz(sizeof(QEMUPutMouseEntry));
455
    if (!s)
456
        return NULL;
457

    
458
    s->qemu_put_mouse_event = func;
459
    s->qemu_put_mouse_event_opaque = opaque;
460
    s->qemu_put_mouse_event_absolute = absolute;
461
    s->qemu_put_mouse_event_name = qemu_strdup(name);
462
    s->next = NULL;
463

    
464
    if (!qemu_put_mouse_event_head) {
465
        qemu_put_mouse_event_head = qemu_put_mouse_event_current = s;
466
        return s;
467
    }
468

    
469
    cursor = qemu_put_mouse_event_head;
470
    while (cursor->next != NULL)
471
        cursor = cursor->next;
472

    
473
    cursor->next = s;
474
    qemu_put_mouse_event_current = s;
475

    
476
    return s;
477
}
478

    
479
void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry)
480
{
481
    QEMUPutMouseEntry *prev = NULL, *cursor;
482

    
483
    if (!qemu_put_mouse_event_head || entry == NULL)
484
        return;
485

    
486
    cursor = qemu_put_mouse_event_head;
487
    while (cursor != NULL && cursor != entry) {
488
        prev = cursor;
489
        cursor = cursor->next;
490
    }
491

    
492
    if (cursor == NULL) // does not exist or list empty
493
        return;
494
    else if (prev == NULL) { // entry is head
495
        qemu_put_mouse_event_head = cursor->next;
496
        if (qemu_put_mouse_event_current == entry)
497
            qemu_put_mouse_event_current = cursor->next;
498
        qemu_free(entry->qemu_put_mouse_event_name);
499
        qemu_free(entry);
500
        return;
501
    }
502

    
503
    prev->next = entry->next;
504

    
505
    if (qemu_put_mouse_event_current == entry)
506
        qemu_put_mouse_event_current = prev;
507

    
508
    qemu_free(entry->qemu_put_mouse_event_name);
509
    qemu_free(entry);
510
}
511

    
512
void kbd_put_keycode(int keycode)
513
{
514
    if (qemu_put_kbd_event) {
515
        qemu_put_kbd_event(qemu_put_kbd_event_opaque, keycode);
516
    }
517
}
518

    
519
void kbd_mouse_event(int dx, int dy, int dz, int buttons_state)
520
{
521
    QEMUPutMouseEvent *mouse_event;
522
    void *mouse_event_opaque;
523

    
524
    if (!qemu_put_mouse_event_current) {
525
        return;
526
    }
527

    
528
    mouse_event =
529
        qemu_put_mouse_event_current->qemu_put_mouse_event;
530
    mouse_event_opaque =
531
        qemu_put_mouse_event_current->qemu_put_mouse_event_opaque;
532

    
533
    if (mouse_event) {
534
        mouse_event(mouse_event_opaque, dx, dy, dz, buttons_state);
535
    }
536
}
537

    
538
int kbd_mouse_is_absolute(void)
539
{
540
    if (!qemu_put_mouse_event_current)
541
        return 0;
542

    
543
    return qemu_put_mouse_event_current->qemu_put_mouse_event_absolute;
544
}
545

    
546
void do_info_mice(void)
547
{
548
    QEMUPutMouseEntry *cursor;
549
    int index = 0;
550

    
551
    if (!qemu_put_mouse_event_head) {
552
        term_printf("No mouse devices connected\n");
553
        return;
554
    }
555

    
556
    term_printf("Mouse devices available:\n");
557
    cursor = qemu_put_mouse_event_head;
558
    while (cursor != NULL) {
559
        term_printf("%c Mouse #%d: %s\n",
560
                    (cursor == qemu_put_mouse_event_current ? '*' : ' '),
561
                    index, cursor->qemu_put_mouse_event_name);
562
        index++;
563
        cursor = cursor->next;
564
    }
565
}
566

    
567
void do_mouse_set(int index)
568
{
569
    QEMUPutMouseEntry *cursor;
570
    int i = 0;
571

    
572
    if (!qemu_put_mouse_event_head) {
573
        term_printf("No mouse devices connected\n");
574
        return;
575
    }
576

    
577
    cursor = qemu_put_mouse_event_head;
578
    while (cursor != NULL && index != i) {
579
        i++;
580
        cursor = cursor->next;
581
    }
582

    
583
    if (cursor != NULL)
584
        qemu_put_mouse_event_current = cursor;
585
    else
586
        term_printf("Mouse at given index not found\n");
587
}
588

    
589
/* compute with 96 bit intermediate result: (a*b)/c */
590
uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
591
{
592
    union {
593
        uint64_t ll;
594
        struct {
595
#ifdef WORDS_BIGENDIAN
596
            uint32_t high, low;
597
#else
598
            uint32_t low, high;
599
#endif            
600
        } l;
601
    } u, res;
602
    uint64_t rl, rh;
603

    
604
    u.ll = a;
605
    rl = (uint64_t)u.l.low * (uint64_t)b;
606
    rh = (uint64_t)u.l.high * (uint64_t)b;
607
    rh += (rl >> 32);
608
    res.l.high = rh / c;
609
    res.l.low = (((rh % c) << 32) + (rl & 0xffffffff)) / c;
610
    return res.ll;
611
}
612

    
613
/***********************************************************/
614
/* real time host monotonic timer */
615

    
616
#define QEMU_TIMER_BASE 1000000000LL
617

    
618
#ifdef WIN32
619

    
620
static int64_t clock_freq;
621

    
622
static void init_get_clock(void)
623
{
624
    LARGE_INTEGER freq;
625
    int ret;
626
    ret = QueryPerformanceFrequency(&freq);
627
    if (ret == 0) {
628
        fprintf(stderr, "Could not calibrate ticks\n");
629
        exit(1);
630
    }
631
    clock_freq = freq.QuadPart;
632
}
633

    
634
static int64_t get_clock(void)
635
{
636
    LARGE_INTEGER ti;
637
    QueryPerformanceCounter(&ti);
638
    return muldiv64(ti.QuadPart, QEMU_TIMER_BASE, clock_freq);
639
}
640

    
641
#else
642

    
643
static int use_rt_clock;
644

    
645
static void init_get_clock(void)
646
{
647
    use_rt_clock = 0;
648
#if defined(__linux__)
649
    {
650
        struct timespec ts;
651
        if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) {
652
            use_rt_clock = 1;
653
        }
654
    }
655
#endif
656
}
657

    
658
static int64_t get_clock(void)
659
{
660
#if defined(__linux__)
661
    if (use_rt_clock) {
662
        struct timespec ts;
663
        clock_gettime(CLOCK_MONOTONIC, &ts);
664
        return ts.tv_sec * 1000000000LL + ts.tv_nsec;
665
    } else 
666
#endif
667
    {
668
        /* XXX: using gettimeofday leads to problems if the date
669
           changes, so it should be avoided. */
670
        struct timeval tv;
671
        gettimeofday(&tv, NULL);
672
        return tv.tv_sec * 1000000000LL + (tv.tv_usec * 1000);
673
    }
674
}
675

    
676
#endif
677

    
678
/***********************************************************/
679
/* guest cycle counter */
680

    
681
static int64_t cpu_ticks_prev;
682
static int64_t cpu_ticks_offset;
683
static int64_t cpu_clock_offset;
684
static int cpu_ticks_enabled;
685

    
686
/* return the host CPU cycle counter and handle stop/restart */
687
int64_t cpu_get_ticks(void)
688
{
689
    if (!cpu_ticks_enabled) {
690
        return cpu_ticks_offset;
691
    } else {
692
        int64_t ticks;
693
        ticks = cpu_get_real_ticks();
694
        if (cpu_ticks_prev > ticks) {
695
            /* Note: non increasing ticks may happen if the host uses
696
               software suspend */
697
            cpu_ticks_offset += cpu_ticks_prev - ticks;
698
        }
699
        cpu_ticks_prev = ticks;
700
        return ticks + cpu_ticks_offset;
701
    }
702
}
703

    
704
/* return the host CPU monotonic timer and handle stop/restart */
705
static int64_t cpu_get_clock(void)
706
{
707
    int64_t ti;
708
    if (!cpu_ticks_enabled) {
709
        return cpu_clock_offset;
710
    } else {
711
        ti = get_clock();
712
        return ti + cpu_clock_offset;
713
    }
714
}
715

    
716
/* enable cpu_get_ticks() */
717
void cpu_enable_ticks(void)
718
{
719
    if (!cpu_ticks_enabled) {
720
        cpu_ticks_offset -= cpu_get_real_ticks();
721
        cpu_clock_offset -= get_clock();
722
        cpu_ticks_enabled = 1;
723
    }
724
}
725

    
726
/* disable cpu_get_ticks() : the clock is stopped. You must not call
727
   cpu_get_ticks() after that.  */
728
void cpu_disable_ticks(void)
729
{
730
    if (cpu_ticks_enabled) {
731
        cpu_ticks_offset = cpu_get_ticks();
732
        cpu_clock_offset = cpu_get_clock();
733
        cpu_ticks_enabled = 0;
734
    }
735
}
736

    
737
/***********************************************************/
738
/* timers */
739
 
740
#define QEMU_TIMER_REALTIME 0
741
#define QEMU_TIMER_VIRTUAL  1
742

    
743
struct QEMUClock {
744
    int type;
745
    /* XXX: add frequency */
746
};
747

    
748
struct QEMUTimer {
749
    QEMUClock *clock;
750
    int64_t expire_time;
751
    QEMUTimerCB *cb;
752
    void *opaque;
753
    struct QEMUTimer *next;
754
};
755

    
756
QEMUClock *rt_clock;
757
QEMUClock *vm_clock;
758

    
759
static QEMUTimer *active_timers[2];
760
#ifdef _WIN32
761
static MMRESULT timerID;
762
static HANDLE host_alarm = NULL;
763
static unsigned int period = 1;
764
#else
765
/* frequency of the times() clock tick */
766
static int timer_freq;
767
#endif
768

    
769
QEMUClock *qemu_new_clock(int type)
770
{
771
    QEMUClock *clock;
772
    clock = qemu_mallocz(sizeof(QEMUClock));
773
    if (!clock)
774
        return NULL;
775
    clock->type = type;
776
    return clock;
777
}
778

    
779
QEMUTimer *qemu_new_timer(QEMUClock *clock, QEMUTimerCB *cb, void *opaque)
780
{
781
    QEMUTimer *ts;
782

    
783
    ts = qemu_mallocz(sizeof(QEMUTimer));
784
    ts->clock = clock;
785
    ts->cb = cb;
786
    ts->opaque = opaque;
787
    return ts;
788
}
789

    
790
void qemu_free_timer(QEMUTimer *ts)
791
{
792
    qemu_free(ts);
793
}
794

    
795
/* stop a timer, but do not dealloc it */
796
void qemu_del_timer(QEMUTimer *ts)
797
{
798
    QEMUTimer **pt, *t;
799

    
800
    /* NOTE: this code must be signal safe because
801
       qemu_timer_expired() can be called from a signal. */
802
    pt = &active_timers[ts->clock->type];
803
    for(;;) {
804
        t = *pt;
805
        if (!t)
806
            break;
807
        if (t == ts) {
808
            *pt = t->next;
809
            break;
810
        }
811
        pt = &t->next;
812
    }
813
}
814

    
815
/* modify the current timer so that it will be fired when current_time
816
   >= expire_time. The corresponding callback will be called. */
817
void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time)
818
{
819
    QEMUTimer **pt, *t;
820

    
821
    qemu_del_timer(ts);
822

    
823
    /* add the timer in the sorted list */
824
    /* NOTE: this code must be signal safe because
825
       qemu_timer_expired() can be called from a signal. */
826
    pt = &active_timers[ts->clock->type];
827
    for(;;) {
828
        t = *pt;
829
        if (!t)
830
            break;
831
        if (t->expire_time > expire_time) 
832
            break;
833
        pt = &t->next;
834
    }
835
    ts->expire_time = expire_time;
836
    ts->next = *pt;
837
    *pt = ts;
838
}
839

    
840
int qemu_timer_pending(QEMUTimer *ts)
841
{
842
    QEMUTimer *t;
843
    for(t = active_timers[ts->clock->type]; t != NULL; t = t->next) {
844
        if (t == ts)
845
            return 1;
846
    }
847
    return 0;
848
}
849

    
850
static inline int qemu_timer_expired(QEMUTimer *timer_head, int64_t current_time)
851
{
852
    if (!timer_head)
853
        return 0;
854
    return (timer_head->expire_time <= current_time);
855
}
856

    
857
static void qemu_run_timers(QEMUTimer **ptimer_head, int64_t current_time)
858
{
859
    QEMUTimer *ts;
860
    
861
    for(;;) {
862
        ts = *ptimer_head;
863
        if (!ts || ts->expire_time > current_time)
864
            break;
865
        /* remove timer from the list before calling the callback */
866
        *ptimer_head = ts->next;
867
        ts->next = NULL;
868
        
869
        /* run the callback (the timer list can be modified) */
870
        ts->cb(ts->opaque);
871
    }
872
}
873

    
874
int64_t qemu_get_clock(QEMUClock *clock)
875
{
876
    switch(clock->type) {
877
    case QEMU_TIMER_REALTIME:
878
        return get_clock() / 1000000;
879
    default:
880
    case QEMU_TIMER_VIRTUAL:
881
        return cpu_get_clock();
882
    }
883
}
884

    
885
static void init_timers(void)
886
{
887
    init_get_clock();
888
    ticks_per_sec = QEMU_TIMER_BASE;
889
    rt_clock = qemu_new_clock(QEMU_TIMER_REALTIME);
890
    vm_clock = qemu_new_clock(QEMU_TIMER_VIRTUAL);
891
}
892

    
893
/* save a timer */
894
void qemu_put_timer(QEMUFile *f, QEMUTimer *ts)
895
{
896
    uint64_t expire_time;
897

    
898
    if (qemu_timer_pending(ts)) {
899
        expire_time = ts->expire_time;
900
    } else {
901
        expire_time = -1;
902
    }
903
    qemu_put_be64(f, expire_time);
904
}
905

    
906
void qemu_get_timer(QEMUFile *f, QEMUTimer *ts)
907
{
908
    uint64_t expire_time;
909

    
910
    expire_time = qemu_get_be64(f);
911
    if (expire_time != -1) {
912
        qemu_mod_timer(ts, expire_time);
913
    } else {
914
        qemu_del_timer(ts);
915
    }
916
}
917

    
918
static void timer_save(QEMUFile *f, void *opaque)
919
{
920
    if (cpu_ticks_enabled) {
921
        hw_error("cannot save state if virtual timers are running");
922
    }
923
    qemu_put_be64s(f, &cpu_ticks_offset);
924
    qemu_put_be64s(f, &ticks_per_sec);
925
    qemu_put_be64s(f, &cpu_clock_offset);
926
}
927

    
928
static int timer_load(QEMUFile *f, void *opaque, int version_id)
929
{
930
    if (version_id != 1 && version_id != 2)
931
        return -EINVAL;
932
    if (cpu_ticks_enabled) {
933
        return -EINVAL;
934
    }
935
    qemu_get_be64s(f, &cpu_ticks_offset);
936
    qemu_get_be64s(f, &ticks_per_sec);
937
    if (version_id == 2) {
938
        qemu_get_be64s(f, &cpu_clock_offset);
939
    }
940
    return 0;
941
}
942

    
943
#ifdef _WIN32
944
void CALLBACK host_alarm_handler(UINT uTimerID, UINT uMsg, 
945
                                 DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2)
946
#else
947
static void host_alarm_handler(int host_signum)
948
#endif
949
{
950
#if 0
951
#define DISP_FREQ 1000
952
    {
953
        static int64_t delta_min = INT64_MAX;
954
        static int64_t delta_max, delta_cum, last_clock, delta, ti;
955
        static int count;
956
        ti = qemu_get_clock(vm_clock);
957
        if (last_clock != 0) {
958
            delta = ti - last_clock;
959
            if (delta < delta_min)
960
                delta_min = delta;
961
            if (delta > delta_max)
962
                delta_max = delta;
963
            delta_cum += delta;
964
            if (++count == DISP_FREQ) {
965
                printf("timer: min=%" PRId64 " us max=%" PRId64 " us avg=%" PRId64 " us avg_freq=%0.3f Hz\n",
966
                       muldiv64(delta_min, 1000000, ticks_per_sec),
967
                       muldiv64(delta_max, 1000000, ticks_per_sec),
968
                       muldiv64(delta_cum, 1000000 / DISP_FREQ, ticks_per_sec),
969
                       (double)ticks_per_sec / ((double)delta_cum / DISP_FREQ));
970
                count = 0;
971
                delta_min = INT64_MAX;
972
                delta_max = 0;
973
                delta_cum = 0;
974
            }
975
        }
976
        last_clock = ti;
977
    }
978
#endif
979
    if (qemu_timer_expired(active_timers[QEMU_TIMER_VIRTUAL],
980
                           qemu_get_clock(vm_clock)) ||
981
        qemu_timer_expired(active_timers[QEMU_TIMER_REALTIME],
982
                           qemu_get_clock(rt_clock))) {
983
#ifdef _WIN32
984
        SetEvent(host_alarm);
985
#endif
986
        CPUState *env = cpu_single_env;
987
        if (env) {
988
            /* stop the currently executing cpu because a timer occured */
989
            cpu_interrupt(env, CPU_INTERRUPT_EXIT);
990
#ifdef USE_KQEMU
991
            if (env->kqemu_enabled) {
992
                kqemu_cpu_interrupt(env);
993
            }
994
#endif
995
        }
996
    }
997
}
998

    
999
#ifndef _WIN32
1000

    
1001
#if defined(__linux__)
1002

    
1003
#define RTC_FREQ 1024
1004

    
1005
static int rtc_fd;
1006

    
1007
static int start_rtc_timer(void)
1008
{
1009
    rtc_fd = open("/dev/rtc", O_RDONLY);
1010
    if (rtc_fd < 0)
1011
        return -1;
1012
    if (ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
1013
        fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
1014
                "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
1015
                "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
1016
        goto fail;
1017
    }
1018
    if (ioctl(rtc_fd, RTC_PIE_ON, 0) < 0) {
1019
    fail:
1020
        close(rtc_fd);
1021
        return -1;
1022
    }
1023
    pit_min_timer_count = PIT_FREQ / RTC_FREQ;
1024
    return 0;
1025
}
1026

    
1027
#else
1028

    
1029
static int start_rtc_timer(void)
1030
{
1031
    return -1;
1032
}
1033

    
1034
#endif /* !defined(__linux__) */
1035

    
1036
#endif /* !defined(_WIN32) */
1037

    
1038
static void init_timer_alarm(void)
1039
{
1040
#ifdef _WIN32
1041
    {
1042
        int count=0;
1043
        TIMECAPS tc;
1044

    
1045
        ZeroMemory(&tc, sizeof(TIMECAPS));
1046
        timeGetDevCaps(&tc, sizeof(TIMECAPS));
1047
        if (period < tc.wPeriodMin)
1048
            period = tc.wPeriodMin;
1049
        timeBeginPeriod(period);
1050
        timerID = timeSetEvent(1,     // interval (ms)
1051
                               period,     // resolution
1052
                               host_alarm_handler, // function
1053
                               (DWORD)&count,  // user parameter
1054
                               TIME_PERIODIC | TIME_CALLBACK_FUNCTION);
1055
         if( !timerID ) {
1056
            perror("failed timer alarm");
1057
            exit(1);
1058
         }
1059
        host_alarm = CreateEvent(NULL, FALSE, FALSE, NULL);
1060
        if (!host_alarm) {
1061
            perror("failed CreateEvent");
1062
            exit(1);
1063
        }
1064
        qemu_add_wait_object(host_alarm, NULL, NULL);
1065
    }
1066
    pit_min_timer_count = ((uint64_t)10000 * PIT_FREQ) / 1000000;
1067
#else
1068
    {
1069
        struct sigaction act;
1070
        struct itimerval itv;
1071
        
1072
        /* get times() syscall frequency */
1073
        timer_freq = sysconf(_SC_CLK_TCK);
1074
        
1075
        /* timer signal */
1076
        sigfillset(&act.sa_mask);
1077
       act.sa_flags = 0;
1078
#if defined (TARGET_I386) && defined(USE_CODE_COPY)
1079
        act.sa_flags |= SA_ONSTACK;
1080
#endif
1081
        act.sa_handler = host_alarm_handler;
1082
        sigaction(SIGALRM, &act, NULL);
1083

    
1084
        itv.it_interval.tv_sec = 0;
1085
        itv.it_interval.tv_usec = 999; /* for i386 kernel 2.6 to get 1 ms */
1086
        itv.it_value.tv_sec = 0;
1087
        itv.it_value.tv_usec = 10 * 1000;
1088
        setitimer(ITIMER_REAL, &itv, NULL);
1089
        /* we probe the tick duration of the kernel to inform the user if
1090
           the emulated kernel requested a too high timer frequency */
1091
        getitimer(ITIMER_REAL, &itv);
1092

    
1093
#if defined(__linux__)
1094
        /* XXX: force /dev/rtc usage because even 2.6 kernels may not
1095
           have timers with 1 ms resolution. The correct solution will
1096
           be to use the POSIX real time timers available in recent
1097
           2.6 kernels */
1098
        if (itv.it_interval.tv_usec > 1000 || 1) {
1099
            /* try to use /dev/rtc to have a faster timer */
1100
            if (start_rtc_timer() < 0)
1101
                goto use_itimer;
1102
            /* disable itimer */
1103
            itv.it_interval.tv_sec = 0;
1104
            itv.it_interval.tv_usec = 0;
1105
            itv.it_value.tv_sec = 0;
1106
            itv.it_value.tv_usec = 0;
1107
            setitimer(ITIMER_REAL, &itv, NULL);
1108

    
1109
            /* use the RTC */
1110
            sigaction(SIGIO, &act, NULL);
1111
            fcntl(rtc_fd, F_SETFL, O_ASYNC);
1112
            fcntl(rtc_fd, F_SETOWN, getpid());
1113
        } else 
1114
#endif /* defined(__linux__) */
1115
        {
1116
        use_itimer:
1117
            pit_min_timer_count = ((uint64_t)itv.it_interval.tv_usec * 
1118
                                   PIT_FREQ) / 1000000;
1119
        }
1120
    }
1121
#endif
1122
}
1123

    
1124
void quit_timers(void)
1125
{
1126
#ifdef _WIN32
1127
    timeKillEvent(timerID);
1128
    timeEndPeriod(period);
1129
    if (host_alarm) {
1130
        CloseHandle(host_alarm);
1131
        host_alarm = NULL;
1132
    }
1133
#endif
1134
}
1135

    
1136
/***********************************************************/
1137
/* character device */
1138

    
1139
static void qemu_chr_event(CharDriverState *s, int event)
1140
{
1141
    if (!s->chr_event)
1142
        return;
1143
    s->chr_event(s->handler_opaque, event);
1144
}
1145

    
1146
static void qemu_chr_reset_bh(void *opaque)
1147
{
1148
    CharDriverState *s = opaque;
1149
    qemu_chr_event(s, CHR_EVENT_RESET);
1150
    qemu_bh_delete(s->bh);
1151
    s->bh = NULL;
1152
}
1153

    
1154
void qemu_chr_reset(CharDriverState *s)
1155
{
1156
    if (s->bh == NULL) {
1157
        s->bh = qemu_bh_new(qemu_chr_reset_bh, s);
1158
        qemu_bh_schedule(s->bh);
1159
    }
1160
}
1161

    
1162
int qemu_chr_write(CharDriverState *s, const uint8_t *buf, int len)
1163
{
1164
    return s->chr_write(s, buf, len);
1165
}
1166

    
1167
int qemu_chr_ioctl(CharDriverState *s, int cmd, void *arg)
1168
{
1169
    if (!s->chr_ioctl)
1170
        return -ENOTSUP;
1171
    return s->chr_ioctl(s, cmd, arg);
1172
}
1173

    
1174
int qemu_chr_can_read(CharDriverState *s)
1175
{
1176
    if (!s->chr_can_read)
1177
        return 0;
1178
    return s->chr_can_read(s->handler_opaque);
1179
}
1180

    
1181
void qemu_chr_read(CharDriverState *s, uint8_t *buf, int len)
1182
{
1183
    s->chr_read(s->handler_opaque, buf, len);
1184
}
1185

    
1186

    
1187
void qemu_chr_printf(CharDriverState *s, const char *fmt, ...)
1188
{
1189
    char buf[4096];
1190
    va_list ap;
1191
    va_start(ap, fmt);
1192
    vsnprintf(buf, sizeof(buf), fmt, ap);
1193
    qemu_chr_write(s, buf, strlen(buf));
1194
    va_end(ap);
1195
}
1196

    
1197
void qemu_chr_send_event(CharDriverState *s, int event)
1198
{
1199
    if (s->chr_send_event)
1200
        s->chr_send_event(s, event);
1201
}
1202

    
1203
void qemu_chr_add_handlers(CharDriverState *s, 
1204
                           IOCanRWHandler *fd_can_read, 
1205
                           IOReadHandler *fd_read,
1206
                           IOEventHandler *fd_event,
1207
                           void *opaque)
1208
{
1209
    s->chr_can_read = fd_can_read;
1210
    s->chr_read = fd_read;
1211
    s->chr_event = fd_event;
1212
    s->handler_opaque = opaque;
1213
    if (s->chr_update_read_handler)
1214
        s->chr_update_read_handler(s);
1215
}
1216
             
1217
static int null_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
1218
{
1219
    return len;
1220
}
1221

    
1222
static CharDriverState *qemu_chr_open_null(void)
1223
{
1224
    CharDriverState *chr;
1225

    
1226
    chr = qemu_mallocz(sizeof(CharDriverState));
1227
    if (!chr)
1228
        return NULL;
1229
    chr->chr_write = null_chr_write;
1230
    return chr;
1231
}
1232

    
1233
/* MUX driver for serial I/O splitting */
1234
static int term_timestamps;
1235
static int64_t term_timestamps_start;
1236
#define MAX_MUX 4
1237
typedef struct {
1238
    IOCanRWHandler *chr_can_read[MAX_MUX];
1239
    IOReadHandler *chr_read[MAX_MUX];
1240
    IOEventHandler *chr_event[MAX_MUX];
1241
    void *ext_opaque[MAX_MUX];
1242
    CharDriverState *drv;
1243
    int mux_cnt;
1244
    int term_got_escape;
1245
    int max_size;
1246
} MuxDriver;
1247

    
1248

    
1249
static int mux_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
1250
{
1251
    MuxDriver *d = chr->opaque;
1252
    int ret;
1253
    if (!term_timestamps) {
1254
        ret = d->drv->chr_write(d->drv, buf, len);
1255
    } else {
1256
        int i;
1257

    
1258
        ret = 0;
1259
        for(i = 0; i < len; i++) {
1260
            ret += d->drv->chr_write(d->drv, buf+i, 1);
1261
            if (buf[i] == '\n') {
1262
                char buf1[64];
1263
                int64_t ti;
1264
                int secs;
1265

    
1266
                ti = get_clock();
1267
                if (term_timestamps_start == -1)
1268
                    term_timestamps_start = ti;
1269
                ti -= term_timestamps_start;
1270
                secs = ti / 1000000000;
1271
                snprintf(buf1, sizeof(buf1),
1272
                         "[%02d:%02d:%02d.%03d] ",
1273
                         secs / 3600,
1274
                         (secs / 60) % 60,
1275
                         secs % 60,
1276
                         (int)((ti / 1000000) % 1000));
1277
                d->drv->chr_write(d->drv, buf1, strlen(buf1));
1278
            }
1279
        }
1280
    }
1281
    return ret;
1282
}
1283

    
1284
static char *mux_help[] = {
1285
    "% h    print this help\n\r",
1286
    "% x    exit emulator\n\r",
1287
    "% s    save disk data back to file (if -snapshot)\n\r",
1288
    "% t    toggle console timestamps\n\r"
1289
    "% b    send break (magic sysrq)\n\r",
1290
    "% c    switch between console and monitor\n\r",
1291
    "% %  sends %\n\r",
1292
    NULL
1293
};
1294

    
1295
static int term_escape_char = 0x01; /* ctrl-a is used for escape */
1296
static void mux_print_help(CharDriverState *chr)
1297
{
1298
    int i, j;
1299
    char ebuf[15] = "Escape-Char";
1300
    char cbuf[50] = "\n\r";
1301

    
1302
    if (term_escape_char > 0 && term_escape_char < 26) {
1303
        sprintf(cbuf,"\n\r");
1304
        sprintf(ebuf,"C-%c", term_escape_char - 1 + 'a');
1305
    } else {
1306
        sprintf(cbuf,"\n\rEscape-Char set to Ascii: 0x%02x\n\r\n\r", term_escape_char);
1307
    }
1308
    chr->chr_write(chr, cbuf, strlen(cbuf));
1309
    for (i = 0; mux_help[i] != NULL; i++) {
1310
        for (j=0; mux_help[i][j] != '\0'; j++) {
1311
            if (mux_help[i][j] == '%')
1312
                chr->chr_write(chr, ebuf, strlen(ebuf));
1313
            else
1314
                chr->chr_write(chr, &mux_help[i][j], 1);
1315
        }
1316
    }
1317
}
1318

    
1319
static int mux_proc_byte(CharDriverState *chr, MuxDriver *d, int ch)
1320
{
1321
    if (d->term_got_escape) {
1322
        d->term_got_escape = 0;
1323
        if (ch == term_escape_char)
1324
            goto send_char;
1325
        switch(ch) {
1326
        case '?':
1327
        case 'h':
1328
            mux_print_help(chr);
1329
            break;
1330
        case 'x':
1331
            {
1332
                 char *term =  "QEMU: Terminated\n\r";
1333
                 chr->chr_write(chr,term,strlen(term));
1334
                 exit(0);
1335
                 break;
1336
            }
1337
        case 's':
1338
            {
1339
                int i;
1340
                for (i = 0; i < MAX_DISKS; i++) {
1341
                    if (bs_table[i])
1342
                        bdrv_commit(bs_table[i]);
1343
                }
1344
            }
1345
            break;
1346
        case 'b':
1347
            if (chr->chr_event)
1348
                chr->chr_event(chr->opaque, CHR_EVENT_BREAK);
1349
            break;
1350
        case 'c':
1351
            /* Switch to the next registered device */
1352
            chr->focus++;
1353
            if (chr->focus >= d->mux_cnt)
1354
                chr->focus = 0;
1355
            break;
1356
       case 't':
1357
           term_timestamps = !term_timestamps;
1358
           term_timestamps_start = -1;
1359
           break;
1360
        }
1361
    } else if (ch == term_escape_char) {
1362
        d->term_got_escape = 1;
1363
    } else {
1364
    send_char:
1365
        return 1;
1366
    }
1367
    return 0;
1368
}
1369

    
1370
static int mux_chr_can_read(void *opaque)
1371
{
1372
    CharDriverState *chr = opaque;
1373
    MuxDriver *d = chr->opaque;
1374
    if (d->chr_can_read[chr->focus])
1375
       return d->chr_can_read[chr->focus](d->ext_opaque[chr->focus]);
1376
    return 0;
1377
}
1378

    
1379
static void mux_chr_read(void *opaque, const uint8_t *buf, int size)
1380
{
1381
    CharDriverState *chr = opaque;
1382
    MuxDriver *d = chr->opaque;
1383
    int i;
1384
    for(i = 0; i < size; i++)
1385
        if (mux_proc_byte(chr, d, buf[i]))
1386
            d->chr_read[chr->focus](d->ext_opaque[chr->focus], &buf[i], 1);
1387
}
1388

    
1389
static void mux_chr_event(void *opaque, int event)
1390
{
1391
    CharDriverState *chr = opaque;
1392
    MuxDriver *d = chr->opaque;
1393
    int i;
1394

    
1395
    /* Send the event to all registered listeners */
1396
    for (i = 0; i < d->mux_cnt; i++)
1397
        if (d->chr_event[i])
1398
            d->chr_event[i](d->ext_opaque[i], event);
1399
}
1400

    
1401
static void mux_chr_update_read_handler(CharDriverState *chr)
1402
{
1403
    MuxDriver *d = chr->opaque;
1404

    
1405
    if (d->mux_cnt >= MAX_MUX) {
1406
        fprintf(stderr, "Cannot add I/O handlers, MUX array is full\n");
1407
        return;
1408
    }
1409
    d->ext_opaque[d->mux_cnt] = chr->handler_opaque;
1410
    d->chr_can_read[d->mux_cnt] = chr->chr_can_read;
1411
    d->chr_read[d->mux_cnt] = chr->chr_read;
1412
    d->chr_event[d->mux_cnt] = chr->chr_event;
1413
    /* Fix up the real driver with mux routines */
1414
    if (d->mux_cnt == 0) {
1415
        qemu_chr_add_handlers(d->drv, mux_chr_can_read, mux_chr_read,
1416
                              mux_chr_event, chr);
1417
    }
1418
    chr->focus = d->mux_cnt;
1419
    d->mux_cnt++;
1420
}
1421

    
1422
CharDriverState *qemu_chr_open_mux(CharDriverState *drv)
1423
{
1424
    CharDriverState *chr;
1425
    MuxDriver *d;
1426

    
1427
    chr = qemu_mallocz(sizeof(CharDriverState));
1428
    if (!chr)
1429
        return NULL;
1430
    d = qemu_mallocz(sizeof(MuxDriver));
1431
    if (!d) {
1432
        free(chr);
1433
        return NULL;
1434
    }
1435

    
1436
    chr->opaque = d;
1437
    d->drv = drv;
1438
    chr->focus = -1;
1439
    chr->chr_write = mux_chr_write;
1440
    chr->chr_update_read_handler = mux_chr_update_read_handler;
1441
    return chr;
1442
}
1443

    
1444

    
1445
#ifdef _WIN32
1446

    
1447
static void socket_cleanup(void)
1448
{
1449
    WSACleanup();
1450
}
1451

    
1452
static int socket_init(void)
1453
{
1454
    WSADATA Data;
1455
    int ret, err;
1456

    
1457
    ret = WSAStartup(MAKEWORD(2,2), &Data);
1458
    if (ret != 0) {
1459
        err = WSAGetLastError();
1460
        fprintf(stderr, "WSAStartup: %d\n", err);
1461
        return -1;
1462
    }
1463
    atexit(socket_cleanup);
1464
    return 0;
1465
}
1466

    
1467
static int send_all(int fd, const uint8_t *buf, int len1)
1468
{
1469
    int ret, len;
1470
    
1471
    len = len1;
1472
    while (len > 0) {
1473
        ret = send(fd, buf, len, 0);
1474
        if (ret < 0) {
1475
            int errno;
1476
            errno = WSAGetLastError();
1477
            if (errno != WSAEWOULDBLOCK) {
1478
                return -1;
1479
            }
1480
        } else if (ret == 0) {
1481
            break;
1482
        } else {
1483
            buf += ret;
1484
            len -= ret;
1485
        }
1486
    }
1487
    return len1 - len;
1488
}
1489

    
1490
void socket_set_nonblock(int fd)
1491
{
1492
    unsigned long opt = 1;
1493
    ioctlsocket(fd, FIONBIO, &opt);
1494
}
1495

    
1496
#else
1497

    
1498
static int unix_write(int fd, const uint8_t *buf, int len1)
1499
{
1500
    int ret, len;
1501

    
1502
    len = len1;
1503
    while (len > 0) {
1504
        ret = write(fd, buf, len);
1505
        if (ret < 0) {
1506
            if (errno != EINTR && errno != EAGAIN)
1507
                return -1;
1508
        } else if (ret == 0) {
1509
            break;
1510
        } else {
1511
            buf += ret;
1512
            len -= ret;
1513
        }
1514
    }
1515
    return len1 - len;
1516
}
1517

    
1518
static inline int send_all(int fd, const uint8_t *buf, int len1)
1519
{
1520
    return unix_write(fd, buf, len1);
1521
}
1522

    
1523
void socket_set_nonblock(int fd)
1524
{
1525
    fcntl(fd, F_SETFL, O_NONBLOCK);
1526
}
1527
#endif /* !_WIN32 */
1528

    
1529
#ifndef _WIN32
1530

    
1531
typedef struct {
1532
    int fd_in, fd_out;
1533
    int max_size;
1534
} FDCharDriver;
1535

    
1536
#define STDIO_MAX_CLIENTS 1
1537
static int stdio_nb_clients = 0;
1538

    
1539
static int fd_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
1540
{
1541
    FDCharDriver *s = chr->opaque;
1542
    return unix_write(s->fd_out, buf, len);
1543
}
1544

    
1545
static int fd_chr_read_poll(void *opaque)
1546
{
1547
    CharDriverState *chr = opaque;
1548
    FDCharDriver *s = chr->opaque;
1549

    
1550
    s->max_size = qemu_chr_can_read(chr);
1551
    return s->max_size;
1552
}
1553

    
1554
static void fd_chr_read(void *opaque)
1555
{
1556
    CharDriverState *chr = opaque;
1557
    FDCharDriver *s = chr->opaque;
1558
    int size, len;
1559
    uint8_t buf[1024];
1560
    
1561
    len = sizeof(buf);
1562
    if (len > s->max_size)
1563
        len = s->max_size;
1564
    if (len == 0)
1565
        return;
1566
    size = read(s->fd_in, buf, len);
1567
    if (size == 0) {
1568
        /* FD has been closed. Remove it from the active list.  */
1569
        qemu_set_fd_handler2(s->fd_in, NULL, NULL, NULL, NULL);
1570
        return;
1571
    }
1572
    if (size > 0) {
1573
        qemu_chr_read(chr, buf, size);
1574
    }
1575
}
1576

    
1577
static void fd_chr_update_read_handler(CharDriverState *chr)
1578
{
1579
    FDCharDriver *s = chr->opaque;
1580

    
1581
    if (s->fd_in >= 0) {
1582
        if (nographic && s->fd_in == 0) {
1583
        } else {
1584
            qemu_set_fd_handler2(s->fd_in, fd_chr_read_poll, 
1585
                                 fd_chr_read, NULL, chr);
1586
        }
1587
    }
1588
}
1589

    
1590
/* open a character device to a unix fd */
1591
static CharDriverState *qemu_chr_open_fd(int fd_in, int fd_out)
1592
{
1593
    CharDriverState *chr;
1594
    FDCharDriver *s;
1595

    
1596
    chr = qemu_mallocz(sizeof(CharDriverState));
1597
    if (!chr)
1598
        return NULL;
1599
    s = qemu_mallocz(sizeof(FDCharDriver));
1600
    if (!s) {
1601
        free(chr);
1602
        return NULL;
1603
    }
1604
    s->fd_in = fd_in;
1605
    s->fd_out = fd_out;
1606
    chr->opaque = s;
1607
    chr->chr_write = fd_chr_write;
1608
    chr->chr_update_read_handler = fd_chr_update_read_handler;
1609

    
1610
    qemu_chr_reset(chr);
1611

    
1612
    return chr;
1613
}
1614

    
1615
static CharDriverState *qemu_chr_open_file_out(const char *file_out)
1616
{
1617
    int fd_out;
1618

    
1619
    fd_out = open(file_out, O_WRONLY | O_TRUNC | O_CREAT | O_BINARY, 0666);
1620
    if (fd_out < 0)
1621
        return NULL;
1622
    return qemu_chr_open_fd(-1, fd_out);
1623
}
1624

    
1625
static CharDriverState *qemu_chr_open_pipe(const char *filename)
1626
{
1627
    int fd_in, fd_out;
1628
    char filename_in[256], filename_out[256];
1629

    
1630
    snprintf(filename_in, 256, "%s.in", filename);
1631
    snprintf(filename_out, 256, "%s.out", filename);
1632
    fd_in = open(filename_in, O_RDWR | O_BINARY);
1633
    fd_out = open(filename_out, O_RDWR | O_BINARY);
1634
    if (fd_in < 0 || fd_out < 0) {
1635
        if (fd_in >= 0)
1636
            close(fd_in);
1637
        if (fd_out >= 0)
1638
            close(fd_out);
1639
        fd_in = fd_out = open(filename, O_RDWR | O_BINARY);
1640
        if (fd_in < 0)
1641
            return NULL;
1642
    }
1643
    return qemu_chr_open_fd(fd_in, fd_out);
1644
}
1645

    
1646

    
1647
/* for STDIO, we handle the case where several clients use it
1648
   (nographic mode) */
1649

    
1650
#define TERM_FIFO_MAX_SIZE 1
1651

    
1652
static uint8_t term_fifo[TERM_FIFO_MAX_SIZE];
1653
static int term_fifo_size;
1654

    
1655
static int stdio_read_poll(void *opaque)
1656
{
1657
    CharDriverState *chr = opaque;
1658

    
1659
    /* try to flush the queue if needed */
1660
    if (term_fifo_size != 0 && qemu_chr_can_read(chr) > 0) {
1661
        qemu_chr_read(chr, term_fifo, 1);
1662
        term_fifo_size = 0;
1663
    }
1664
    /* see if we can absorb more chars */
1665
    if (term_fifo_size == 0)
1666
        return 1;
1667
    else
1668
        return 0;
1669
}
1670

    
1671
static void stdio_read(void *opaque)
1672
{
1673
    int size;
1674
    uint8_t buf[1];
1675
    CharDriverState *chr = opaque;
1676

    
1677
    size = read(0, buf, 1);
1678
    if (size == 0) {
1679
        /* stdin has been closed. Remove it from the active list.  */
1680
        qemu_set_fd_handler2(0, NULL, NULL, NULL, NULL);
1681
        return;
1682
    }
1683
    if (size > 0) {
1684
        if (qemu_chr_can_read(chr) > 0) {
1685
            qemu_chr_read(chr, buf, 1);
1686
        } else if (term_fifo_size == 0) {
1687
            term_fifo[term_fifo_size++] = buf[0];
1688
        }
1689
    }
1690
}
1691

    
1692
/* init terminal so that we can grab keys */
1693
static struct termios oldtty;
1694
static int old_fd0_flags;
1695

    
1696
static void term_exit(void)
1697
{
1698
    tcsetattr (0, TCSANOW, &oldtty);
1699
    fcntl(0, F_SETFL, old_fd0_flags);
1700
}
1701

    
1702
static void term_init(void)
1703
{
1704
    struct termios tty;
1705

    
1706
    tcgetattr (0, &tty);
1707
    oldtty = tty;
1708
    old_fd0_flags = fcntl(0, F_GETFL);
1709

    
1710
    tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
1711
                          |INLCR|IGNCR|ICRNL|IXON);
1712
    tty.c_oflag |= OPOST;
1713
    tty.c_lflag &= ~(ECHO|ECHONL|ICANON|IEXTEN);
1714
    /* if graphical mode, we allow Ctrl-C handling */
1715
    if (nographic)
1716
        tty.c_lflag &= ~ISIG;
1717
    tty.c_cflag &= ~(CSIZE|PARENB);
1718
    tty.c_cflag |= CS8;
1719
    tty.c_cc[VMIN] = 1;
1720
    tty.c_cc[VTIME] = 0;
1721
    
1722
    tcsetattr (0, TCSANOW, &tty);
1723

    
1724
    atexit(term_exit);
1725

    
1726
    fcntl(0, F_SETFL, O_NONBLOCK);
1727
}
1728

    
1729
static CharDriverState *qemu_chr_open_stdio(void)
1730
{
1731
    CharDriverState *chr;
1732

    
1733
    if (stdio_nb_clients >= STDIO_MAX_CLIENTS)
1734
        return NULL;
1735
    chr = qemu_chr_open_fd(0, 1);
1736
    qemu_set_fd_handler2(0, stdio_read_poll, stdio_read, NULL, chr);
1737
    stdio_nb_clients++;
1738
    term_init();
1739

    
1740
    return chr;
1741
}
1742

    
1743
#if defined(__linux__)
1744
static CharDriverState *qemu_chr_open_pty(void)
1745
{
1746
    struct termios tty;
1747
    char slave_name[1024];
1748
    int master_fd, slave_fd;
1749
    
1750
    /* Not satisfying */
1751
    if (openpty(&master_fd, &slave_fd, slave_name, NULL, NULL) < 0) {
1752
        return NULL;
1753
    }
1754
    
1755
    /* Disabling local echo and line-buffered output */
1756
    tcgetattr (master_fd, &tty);
1757
    tty.c_lflag &= ~(ECHO|ICANON|ISIG);
1758
    tty.c_cc[VMIN] = 1;
1759
    tty.c_cc[VTIME] = 0;
1760
    tcsetattr (master_fd, TCSAFLUSH, &tty);
1761

    
1762
    fprintf(stderr, "char device redirected to %s\n", slave_name);
1763
    return qemu_chr_open_fd(master_fd, master_fd);
1764
}
1765

    
1766
static void tty_serial_init(int fd, int speed, 
1767
                            int parity, int data_bits, int stop_bits)
1768
{
1769
    struct termios tty;
1770
    speed_t spd;
1771

    
1772
#if 0
1773
    printf("tty_serial_init: speed=%d parity=%c data=%d stop=%d\n", 
1774
           speed, parity, data_bits, stop_bits);
1775
#endif
1776
    tcgetattr (fd, &tty);
1777

    
1778
    switch(speed) {
1779
    case 50:
1780
        spd = B50;
1781
        break;
1782
    case 75:
1783
        spd = B75;
1784
        break;
1785
    case 300:
1786
        spd = B300;
1787
        break;
1788
    case 600:
1789
        spd = B600;
1790
        break;
1791
    case 1200:
1792
        spd = B1200;
1793
        break;
1794
    case 2400:
1795
        spd = B2400;
1796
        break;
1797
    case 4800:
1798
        spd = B4800;
1799
        break;
1800
    case 9600:
1801
        spd = B9600;
1802
        break;
1803
    case 19200:
1804
        spd = B19200;
1805
        break;
1806
    case 38400:
1807
        spd = B38400;
1808
        break;
1809
    case 57600:
1810
        spd = B57600;
1811
        break;
1812
    default:
1813
    case 115200:
1814
        spd = B115200;
1815
        break;
1816
    }
1817

    
1818
    cfsetispeed(&tty, spd);
1819
    cfsetospeed(&tty, spd);
1820

    
1821
    tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
1822
                          |INLCR|IGNCR|ICRNL|IXON);
1823
    tty.c_oflag |= OPOST;
1824
    tty.c_lflag &= ~(ECHO|ECHONL|ICANON|IEXTEN|ISIG);
1825
    tty.c_cflag &= ~(CSIZE|PARENB|PARODD|CRTSCTS|CSTOPB);
1826
    switch(data_bits) {
1827
    default:
1828
    case 8:
1829
        tty.c_cflag |= CS8;
1830
        break;
1831
    case 7:
1832
        tty.c_cflag |= CS7;
1833
        break;
1834
    case 6:
1835
        tty.c_cflag |= CS6;
1836
        break;
1837
    case 5:
1838
        tty.c_cflag |= CS5;
1839
        break;
1840
    }
1841
    switch(parity) {
1842
    default:
1843
    case 'N':
1844
        break;
1845
    case 'E':
1846
        tty.c_cflag |= PARENB;
1847
        break;
1848
    case 'O':
1849
        tty.c_cflag |= PARENB | PARODD;
1850
        break;
1851
    }
1852
    if (stop_bits == 2)
1853
        tty.c_cflag |= CSTOPB;
1854
    
1855
    tcsetattr (fd, TCSANOW, &tty);
1856
}
1857

    
1858
static int tty_serial_ioctl(CharDriverState *chr, int cmd, void *arg)
1859
{
1860
    FDCharDriver *s = chr->opaque;
1861
    
1862
    switch(cmd) {
1863
    case CHR_IOCTL_SERIAL_SET_PARAMS:
1864
        {
1865
            QEMUSerialSetParams *ssp = arg;
1866
            tty_serial_init(s->fd_in, ssp->speed, ssp->parity, 
1867
                            ssp->data_bits, ssp->stop_bits);
1868
        }
1869
        break;
1870
    case CHR_IOCTL_SERIAL_SET_BREAK:
1871
        {
1872
            int enable = *(int *)arg;
1873
            if (enable)
1874
                tcsendbreak(s->fd_in, 1);
1875
        }
1876
        break;
1877
    default:
1878
        return -ENOTSUP;
1879
    }
1880
    return 0;
1881
}
1882

    
1883
static CharDriverState *qemu_chr_open_tty(const char *filename)
1884
{
1885
    CharDriverState *chr;
1886
    int fd;
1887

    
1888
    fd = open(filename, O_RDWR | O_NONBLOCK);
1889
    if (fd < 0)
1890
        return NULL;
1891
    fcntl(fd, F_SETFL, O_NONBLOCK);
1892
    tty_serial_init(fd, 115200, 'N', 8, 1);
1893
    chr = qemu_chr_open_fd(fd, fd);
1894
    if (!chr)
1895
        return NULL;
1896
    chr->chr_ioctl = tty_serial_ioctl;
1897
    qemu_chr_reset(chr);
1898
    return chr;
1899
}
1900

    
1901
typedef struct {
1902
    int fd;
1903
    int mode;
1904
} ParallelCharDriver;
1905

    
1906
static int pp_hw_mode(ParallelCharDriver *s, uint16_t mode)
1907
{
1908
    if (s->mode != mode) {
1909
        int m = mode;
1910
        if (ioctl(s->fd, PPSETMODE, &m) < 0)
1911
            return 0;
1912
        s->mode = mode;
1913
    }
1914
    return 1;
1915
}
1916

    
1917
static int pp_ioctl(CharDriverState *chr, int cmd, void *arg)
1918
{
1919
    ParallelCharDriver *drv = chr->opaque;
1920
    int fd = drv->fd;
1921
    uint8_t b;
1922

    
1923
    switch(cmd) {
1924
    case CHR_IOCTL_PP_READ_DATA:
1925
        if (ioctl(fd, PPRDATA, &b) < 0)
1926
            return -ENOTSUP;
1927
        *(uint8_t *)arg = b;
1928
        break;
1929
    case CHR_IOCTL_PP_WRITE_DATA:
1930
        b = *(uint8_t *)arg;
1931
        if (ioctl(fd, PPWDATA, &b) < 0)
1932
            return -ENOTSUP;
1933
        break;
1934
    case CHR_IOCTL_PP_READ_CONTROL:
1935
        if (ioctl(fd, PPRCONTROL, &b) < 0)
1936
            return -ENOTSUP;
1937
        /* Linux gives only the lowest bits, and no way to know data
1938
           direction! For better compatibility set the fixed upper
1939
           bits. */
1940
        *(uint8_t *)arg = b | 0xc0;
1941
        break;
1942
    case CHR_IOCTL_PP_WRITE_CONTROL:
1943
        b = *(uint8_t *)arg;
1944
        if (ioctl(fd, PPWCONTROL, &b) < 0)
1945
            return -ENOTSUP;
1946
        break;
1947
    case CHR_IOCTL_PP_READ_STATUS:
1948
        if (ioctl(fd, PPRSTATUS, &b) < 0)
1949
            return -ENOTSUP;
1950
        *(uint8_t *)arg = b;
1951
        break;
1952
    case CHR_IOCTL_PP_EPP_READ_ADDR:
1953
        if (pp_hw_mode(drv, IEEE1284_MODE_EPP|IEEE1284_ADDR)) {
1954
            struct ParallelIOArg *parg = arg;
1955
            int n = read(fd, parg->buffer, parg->count);
1956
            if (n != parg->count) {
1957
                return -EIO;
1958
            }
1959
        }
1960
        break;
1961
    case CHR_IOCTL_PP_EPP_READ:
1962
        if (pp_hw_mode(drv, IEEE1284_MODE_EPP)) {
1963
            struct ParallelIOArg *parg = arg;
1964
            int n = read(fd, parg->buffer, parg->count);
1965
            if (n != parg->count) {
1966
                return -EIO;
1967
            }
1968
        }
1969
        break;
1970
    case CHR_IOCTL_PP_EPP_WRITE_ADDR:
1971
        if (pp_hw_mode(drv, IEEE1284_MODE_EPP|IEEE1284_ADDR)) {
1972
            struct ParallelIOArg *parg = arg;
1973
            int n = write(fd, parg->buffer, parg->count);
1974
            if (n != parg->count) {
1975
                return -EIO;
1976
            }
1977
        }
1978
        break;
1979
    case CHR_IOCTL_PP_EPP_WRITE:
1980
        if (pp_hw_mode(drv, IEEE1284_MODE_EPP)) {
1981
            struct ParallelIOArg *parg = arg;
1982
            int n = write(fd, parg->buffer, parg->count);
1983
            if (n != parg->count) {
1984
                return -EIO;
1985
            }
1986
        }
1987
        break;
1988
    default:
1989
        return -ENOTSUP;
1990
    }
1991
    return 0;
1992
}
1993

    
1994
static void pp_close(CharDriverState *chr)
1995
{
1996
    ParallelCharDriver *drv = chr->opaque;
1997
    int fd = drv->fd;
1998

    
1999
    pp_hw_mode(drv, IEEE1284_MODE_COMPAT);
2000
    ioctl(fd, PPRELEASE);
2001
    close(fd);
2002
    qemu_free(drv);
2003
}
2004

    
2005
static CharDriverState *qemu_chr_open_pp(const char *filename)
2006
{
2007
    CharDriverState *chr;
2008
    ParallelCharDriver *drv;
2009
    int fd;
2010

    
2011
    fd = open(filename, O_RDWR);
2012
    if (fd < 0)
2013
        return NULL;
2014

    
2015
    if (ioctl(fd, PPCLAIM) < 0) {
2016
        close(fd);
2017
        return NULL;
2018
    }
2019

    
2020
    drv = qemu_mallocz(sizeof(ParallelCharDriver));
2021
    if (!drv) {
2022
        close(fd);
2023
        return NULL;
2024
    }
2025
    drv->fd = fd;
2026
    drv->mode = IEEE1284_MODE_COMPAT;
2027

    
2028
    chr = qemu_mallocz(sizeof(CharDriverState));
2029
    if (!chr) {
2030
        qemu_free(drv);
2031
        close(fd);
2032
        return NULL;
2033
    }
2034
    chr->chr_write = null_chr_write;
2035
    chr->chr_ioctl = pp_ioctl;
2036
    chr->chr_close = pp_close;
2037
    chr->opaque = drv;
2038

    
2039
    qemu_chr_reset(chr);
2040

    
2041
    return chr;
2042
}
2043

    
2044
#else
2045
static CharDriverState *qemu_chr_open_pty(void)
2046
{
2047
    return NULL;
2048
}
2049
#endif
2050

    
2051
#endif /* !defined(_WIN32) */
2052

    
2053
#ifdef _WIN32
2054
typedef struct {
2055
    int max_size;
2056
    HANDLE hcom, hrecv, hsend;
2057
    OVERLAPPED orecv, osend;
2058
    BOOL fpipe;
2059
    DWORD len;
2060
} WinCharState;
2061

    
2062
#define NSENDBUF 2048
2063
#define NRECVBUF 2048
2064
#define MAXCONNECT 1
2065
#define NTIMEOUT 5000
2066

    
2067
static int win_chr_poll(void *opaque);
2068
static int win_chr_pipe_poll(void *opaque);
2069

    
2070
static void win_chr_close(CharDriverState *chr)
2071
{
2072
    WinCharState *s = chr->opaque;
2073

    
2074
    if (s->hsend) {
2075
        CloseHandle(s->hsend);
2076
        s->hsend = NULL;
2077
    }
2078
    if (s->hrecv) {
2079
        CloseHandle(s->hrecv);
2080
        s->hrecv = NULL;
2081
    }
2082
    if (s->hcom) {
2083
        CloseHandle(s->hcom);
2084
        s->hcom = NULL;
2085
    }
2086
    if (s->fpipe)
2087
        qemu_del_polling_cb(win_chr_pipe_poll, chr);
2088
    else
2089
        qemu_del_polling_cb(win_chr_poll, chr);
2090
}
2091

    
2092
static int win_chr_init(CharDriverState *chr, const char *filename)
2093
{
2094
    WinCharState *s = chr->opaque;
2095
    COMMCONFIG comcfg;
2096
    COMMTIMEOUTS cto = { 0, 0, 0, 0, 0};
2097
    COMSTAT comstat;
2098
    DWORD size;
2099
    DWORD err;
2100
    
2101
    s->hsend = CreateEvent(NULL, TRUE, FALSE, NULL);
2102
    if (!s->hsend) {
2103
        fprintf(stderr, "Failed CreateEvent\n");
2104
        goto fail;
2105
    }
2106
    s->hrecv = CreateEvent(NULL, TRUE, FALSE, NULL);
2107
    if (!s->hrecv) {
2108
        fprintf(stderr, "Failed CreateEvent\n");
2109
        goto fail;
2110
    }
2111

    
2112
    s->hcom = CreateFile(filename, GENERIC_READ|GENERIC_WRITE, 0, NULL,
2113
                      OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
2114
    if (s->hcom == INVALID_HANDLE_VALUE) {
2115
        fprintf(stderr, "Failed CreateFile (%lu)\n", GetLastError());
2116
        s->hcom = NULL;
2117
        goto fail;
2118
    }
2119
    
2120
    if (!SetupComm(s->hcom, NRECVBUF, NSENDBUF)) {
2121
        fprintf(stderr, "Failed SetupComm\n");
2122
        goto fail;
2123
    }
2124
    
2125
    ZeroMemory(&comcfg, sizeof(COMMCONFIG));
2126
    size = sizeof(COMMCONFIG);
2127
    GetDefaultCommConfig(filename, &comcfg, &size);
2128
    comcfg.dcb.DCBlength = sizeof(DCB);
2129
    CommConfigDialog(filename, NULL, &comcfg);
2130

    
2131
    if (!SetCommState(s->hcom, &comcfg.dcb)) {
2132
        fprintf(stderr, "Failed SetCommState\n");
2133
        goto fail;
2134
    }
2135

    
2136
    if (!SetCommMask(s->hcom, EV_ERR)) {
2137
        fprintf(stderr, "Failed SetCommMask\n");
2138
        goto fail;
2139
    }
2140

    
2141
    cto.ReadIntervalTimeout = MAXDWORD;
2142
    if (!SetCommTimeouts(s->hcom, &cto)) {
2143
        fprintf(stderr, "Failed SetCommTimeouts\n");
2144
        goto fail;
2145
    }
2146
    
2147
    if (!ClearCommError(s->hcom, &err, &comstat)) {
2148
        fprintf(stderr, "Failed ClearCommError\n");
2149
        goto fail;
2150
    }
2151
    qemu_add_polling_cb(win_chr_poll, chr);
2152
    return 0;
2153

    
2154
 fail:
2155
    win_chr_close(chr);
2156
    return -1;
2157
}
2158

    
2159
static int win_chr_write(CharDriverState *chr, const uint8_t *buf, int len1)
2160
{
2161
    WinCharState *s = chr->opaque;
2162
    DWORD len, ret, size, err;
2163

    
2164
    len = len1;
2165
    ZeroMemory(&s->osend, sizeof(s->osend));
2166
    s->osend.hEvent = s->hsend;
2167
    while (len > 0) {
2168
        if (s->hsend)
2169
            ret = WriteFile(s->hcom, buf, len, &size, &s->osend);
2170
        else
2171
            ret = WriteFile(s->hcom, buf, len, &size, NULL);
2172
        if (!ret) {
2173
            err = GetLastError();
2174
            if (err == ERROR_IO_PENDING) {
2175
                ret = GetOverlappedResult(s->hcom, &s->osend, &size, TRUE);
2176
                if (ret) {
2177
                    buf += size;
2178
                    len -= size;
2179
                } else {
2180
                    break;
2181
                }
2182
            } else {
2183
                break;
2184
            }
2185
        } else {
2186
            buf += size;
2187
            len -= size;
2188
        }
2189
    }
2190
    return len1 - len;
2191
}
2192

    
2193
static int win_chr_read_poll(CharDriverState *chr)
2194
{
2195
    WinCharState *s = chr->opaque;
2196

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

    
2201
static void win_chr_readfile(CharDriverState *chr)
2202
{
2203
    WinCharState *s = chr->opaque;
2204
    int ret, err;
2205
    uint8_t buf[1024];
2206
    DWORD size;
2207
    
2208
    ZeroMemory(&s->orecv, sizeof(s->orecv));
2209
    s->orecv.hEvent = s->hrecv;
2210
    ret = ReadFile(s->hcom, buf, s->len, &size, &s->orecv);
2211
    if (!ret) {
2212
        err = GetLastError();
2213
        if (err == ERROR_IO_PENDING) {
2214
            ret = GetOverlappedResult(s->hcom, &s->orecv, &size, TRUE);
2215
        }
2216
    }
2217

    
2218
    if (size > 0) {
2219
        qemu_chr_read(chr, buf, size);
2220
    }
2221
}
2222

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

    
2227
    if (s->len > s->max_size)
2228
        s->len = s->max_size;
2229
    if (s->len == 0)
2230
        return;
2231
    
2232
    win_chr_readfile(chr);
2233
}
2234

    
2235
static int win_chr_poll(void *opaque)
2236
{
2237
    CharDriverState *chr = opaque;
2238
    WinCharState *s = chr->opaque;
2239
    COMSTAT status;
2240
    DWORD comerr;
2241
    
2242
    ClearCommError(s->hcom, &comerr, &status);
2243
    if (status.cbInQue > 0) {
2244
        s->len = status.cbInQue;
2245
        win_chr_read_poll(chr);
2246
        win_chr_read(chr);
2247
        return 1;
2248
    }
2249
    return 0;
2250
}
2251

    
2252
static CharDriverState *qemu_chr_open_win(const char *filename)
2253
{
2254
    CharDriverState *chr;
2255
    WinCharState *s;
2256
    
2257
    chr = qemu_mallocz(sizeof(CharDriverState));
2258
    if (!chr)
2259
        return NULL;
2260
    s = qemu_mallocz(sizeof(WinCharState));
2261
    if (!s) {
2262
        free(chr);
2263
        return NULL;
2264
    }
2265
    chr->opaque = s;
2266
    chr->chr_write = win_chr_write;
2267
    chr->chr_close = win_chr_close;
2268

    
2269
    if (win_chr_init(chr, filename) < 0) {
2270
        free(s);
2271
        free(chr);
2272
        return NULL;
2273
    }
2274
    qemu_chr_reset(chr);
2275
    return chr;
2276
}
2277

    
2278
static int win_chr_pipe_poll(void *opaque)
2279
{
2280
    CharDriverState *chr = opaque;
2281
    WinCharState *s = chr->opaque;
2282
    DWORD size;
2283

    
2284
    PeekNamedPipe(s->hcom, NULL, 0, NULL, &size, NULL);
2285
    if (size > 0) {
2286
        s->len = size;
2287
        win_chr_read_poll(chr);
2288
        win_chr_read(chr);
2289
        return 1;
2290
    }
2291
    return 0;
2292
}
2293

    
2294
static int win_chr_pipe_init(CharDriverState *chr, const char *filename)
2295
{
2296
    WinCharState *s = chr->opaque;
2297
    OVERLAPPED ov;
2298
    int ret;
2299
    DWORD size;
2300
    char openname[256];
2301
    
2302
    s->fpipe = TRUE;
2303

    
2304
    s->hsend = CreateEvent(NULL, TRUE, FALSE, NULL);
2305
    if (!s->hsend) {
2306
        fprintf(stderr, "Failed CreateEvent\n");
2307
        goto fail;
2308
    }
2309
    s->hrecv = CreateEvent(NULL, TRUE, FALSE, NULL);
2310
    if (!s->hrecv) {
2311
        fprintf(stderr, "Failed CreateEvent\n");
2312
        goto fail;
2313
    }
2314
    
2315
    snprintf(openname, sizeof(openname), "\\\\.\\pipe\\%s", filename);
2316
    s->hcom = CreateNamedPipe(openname, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
2317
                              PIPE_TYPE_BYTE | PIPE_READMODE_BYTE |
2318
                              PIPE_WAIT,
2319
                              MAXCONNECT, NSENDBUF, NRECVBUF, NTIMEOUT, NULL);
2320
    if (s->hcom == INVALID_HANDLE_VALUE) {
2321
        fprintf(stderr, "Failed CreateNamedPipe (%lu)\n", GetLastError());
2322
        s->hcom = NULL;
2323
        goto fail;
2324
    }
2325

    
2326
    ZeroMemory(&ov, sizeof(ov));
2327
    ov.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
2328
    ret = ConnectNamedPipe(s->hcom, &ov);
2329
    if (ret) {
2330
        fprintf(stderr, "Failed ConnectNamedPipe\n");
2331
        goto fail;
2332
    }
2333

    
2334
    ret = GetOverlappedResult(s->hcom, &ov, &size, TRUE);
2335
    if (!ret) {
2336
        fprintf(stderr, "Failed GetOverlappedResult\n");
2337
        if (ov.hEvent) {
2338
            CloseHandle(ov.hEvent);
2339
            ov.hEvent = NULL;
2340
        }
2341
        goto fail;
2342
    }
2343

    
2344
    if (ov.hEvent) {
2345
        CloseHandle(ov.hEvent);
2346
        ov.hEvent = NULL;
2347
    }
2348
    qemu_add_polling_cb(win_chr_pipe_poll, chr);
2349
    return 0;
2350

    
2351
 fail:
2352
    win_chr_close(chr);
2353
    return -1;
2354
}
2355

    
2356

    
2357
static CharDriverState *qemu_chr_open_win_pipe(const char *filename)
2358
{
2359
    CharDriverState *chr;
2360
    WinCharState *s;
2361

    
2362
    chr = qemu_mallocz(sizeof(CharDriverState));
2363
    if (!chr)
2364
        return NULL;
2365
    s = qemu_mallocz(sizeof(WinCharState));
2366
    if (!s) {
2367
        free(chr);
2368
        return NULL;
2369
    }
2370
    chr->opaque = s;
2371
    chr->chr_write = win_chr_write;
2372
    chr->chr_close = win_chr_close;
2373
    
2374
    if (win_chr_pipe_init(chr, filename) < 0) {
2375
        free(s);
2376
        free(chr);
2377
        return NULL;
2378
    }
2379
    qemu_chr_reset(chr);
2380
    return chr;
2381
}
2382

    
2383
static CharDriverState *qemu_chr_open_win_file(HANDLE fd_out)
2384
{
2385
    CharDriverState *chr;
2386
    WinCharState *s;
2387

    
2388
    chr = qemu_mallocz(sizeof(CharDriverState));
2389
    if (!chr)
2390
        return NULL;
2391
    s = qemu_mallocz(sizeof(WinCharState));
2392
    if (!s) {
2393
        free(chr);
2394
        return NULL;
2395
    }
2396
    s->hcom = fd_out;
2397
    chr->opaque = s;
2398
    chr->chr_write = win_chr_write;
2399
    qemu_chr_reset(chr);
2400
    return chr;
2401
}
2402
    
2403
static CharDriverState *qemu_chr_open_win_file_out(const char *file_out)
2404
{
2405
    HANDLE fd_out;
2406
    
2407
    fd_out = CreateFile(file_out, GENERIC_WRITE, FILE_SHARE_READ, NULL,
2408
                        OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
2409
    if (fd_out == INVALID_HANDLE_VALUE)
2410
        return NULL;
2411

    
2412
    return qemu_chr_open_win_file(fd_out);
2413
}
2414
#endif
2415

    
2416
/***********************************************************/
2417
/* UDP Net console */
2418

    
2419
typedef struct {
2420
    int fd;
2421
    struct sockaddr_in daddr;
2422
    char buf[1024];
2423
    int bufcnt;
2424
    int bufptr;
2425
    int max_size;
2426
} NetCharDriver;
2427

    
2428
static int udp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
2429
{
2430
    NetCharDriver *s = chr->opaque;
2431

    
2432
    return sendto(s->fd, buf, len, 0,
2433
                  (struct sockaddr *)&s->daddr, sizeof(struct sockaddr_in));
2434
}
2435

    
2436
static int udp_chr_read_poll(void *opaque)
2437
{
2438
    CharDriverState *chr = opaque;
2439
    NetCharDriver *s = chr->opaque;
2440

    
2441
    s->max_size = qemu_chr_can_read(chr);
2442

    
2443
    /* If there were any stray characters in the queue process them
2444
     * first
2445
     */
2446
    while (s->max_size > 0 && s->bufptr < s->bufcnt) {
2447
        qemu_chr_read(chr, &s->buf[s->bufptr], 1);
2448
        s->bufptr++;
2449
        s->max_size = qemu_chr_can_read(chr);
2450
    }
2451
    return s->max_size;
2452
}
2453

    
2454
static void udp_chr_read(void *opaque)
2455
{
2456
    CharDriverState *chr = opaque;
2457
    NetCharDriver *s = chr->opaque;
2458

    
2459
    if (s->max_size == 0)
2460
        return;
2461
    s->bufcnt = recv(s->fd, s->buf, sizeof(s->buf), 0);
2462
    s->bufptr = s->bufcnt;
2463
    if (s->bufcnt <= 0)
2464
        return;
2465

    
2466
    s->bufptr = 0;
2467
    while (s->max_size > 0 && s->bufptr < s->bufcnt) {
2468
        qemu_chr_read(chr, &s->buf[s->bufptr], 1);
2469
        s->bufptr++;
2470
        s->max_size = qemu_chr_can_read(chr);
2471
    }
2472
}
2473

    
2474
static void udp_chr_update_read_handler(CharDriverState *chr)
2475
{
2476
    NetCharDriver *s = chr->opaque;
2477

    
2478
    if (s->fd >= 0) {
2479
        qemu_set_fd_handler2(s->fd, udp_chr_read_poll,
2480
                             udp_chr_read, NULL, chr);
2481
    }
2482
}
2483

    
2484
int parse_host_port(struct sockaddr_in *saddr, const char *str);
2485
#ifndef _WIN32
2486
static int parse_unix_path(struct sockaddr_un *uaddr, const char *str);
2487
#endif
2488
int parse_host_src_port(struct sockaddr_in *haddr,
2489
                        struct sockaddr_in *saddr,
2490
                        const char *str);
2491

    
2492
static CharDriverState *qemu_chr_open_udp(const char *def)
2493
{
2494
    CharDriverState *chr = NULL;
2495
    NetCharDriver *s = NULL;
2496
    int fd = -1;
2497
    struct sockaddr_in saddr;
2498

    
2499
    chr = qemu_mallocz(sizeof(CharDriverState));
2500
    if (!chr)
2501
        goto return_err;
2502
    s = qemu_mallocz(sizeof(NetCharDriver));
2503
    if (!s)
2504
        goto return_err;
2505

    
2506
    fd = socket(PF_INET, SOCK_DGRAM, 0);
2507
    if (fd < 0) {
2508
        perror("socket(PF_INET, SOCK_DGRAM)");
2509
        goto return_err;
2510
    }
2511

    
2512
    if (parse_host_src_port(&s->daddr, &saddr, def) < 0) {
2513
        printf("Could not parse: %s\n", def);
2514
        goto return_err;
2515
    }
2516

    
2517
    if (bind(fd, (struct sockaddr *)&saddr, sizeof(saddr)) < 0)
2518
    {
2519
        perror("bind");
2520
        goto return_err;
2521
    }
2522

    
2523
    s->fd = fd;
2524
    s->bufcnt = 0;
2525
    s->bufptr = 0;
2526
    chr->opaque = s;
2527
    chr->chr_write = udp_chr_write;
2528
    chr->chr_update_read_handler = udp_chr_update_read_handler;
2529
    return chr;
2530

    
2531
return_err:
2532
    if (chr)
2533
        free(chr);
2534
    if (s)
2535
        free(s);
2536
    if (fd >= 0)
2537
        closesocket(fd);
2538
    return NULL;
2539
}
2540

    
2541
/***********************************************************/
2542
/* TCP Net console */
2543

    
2544
typedef struct {
2545
    int fd, listen_fd;
2546
    int connected;
2547
    int max_size;
2548
    int do_telnetopt;
2549
    int do_nodelay;
2550
    int is_unix;
2551
} TCPCharDriver;
2552

    
2553
static void tcp_chr_accept(void *opaque);
2554

    
2555
static int tcp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
2556
{
2557
    TCPCharDriver *s = chr->opaque;
2558
    if (s->connected) {
2559
        return send_all(s->fd, buf, len);
2560
    } else {
2561
        /* XXX: indicate an error ? */
2562
        return len;
2563
    }
2564
}
2565

    
2566
static int tcp_chr_read_poll(void *opaque)
2567
{
2568
    CharDriverState *chr = opaque;
2569
    TCPCharDriver *s = chr->opaque;
2570
    if (!s->connected)
2571
        return 0;
2572
    s->max_size = qemu_chr_can_read(chr);
2573
    return s->max_size;
2574
}
2575

    
2576
#define IAC 255
2577
#define IAC_BREAK 243
2578
static void tcp_chr_process_IAC_bytes(CharDriverState *chr,
2579
                                      TCPCharDriver *s,
2580
                                      char *buf, int *size)
2581
{
2582
    /* Handle any telnet client's basic IAC options to satisfy char by
2583
     * char mode with no echo.  All IAC options will be removed from
2584
     * the buf and the do_telnetopt variable will be used to track the
2585
     * state of the width of the IAC information.
2586
     *
2587
     * IAC commands come in sets of 3 bytes with the exception of the
2588
     * "IAC BREAK" command and the double IAC.
2589
     */
2590

    
2591
    int i;
2592
    int j = 0;
2593

    
2594
    for (i = 0; i < *size; i++) {
2595
        if (s->do_telnetopt > 1) {
2596
            if ((unsigned char)buf[i] == IAC && s->do_telnetopt == 2) {
2597
                /* Double IAC means send an IAC */
2598
                if (j != i)
2599
                    buf[j] = buf[i];
2600
                j++;
2601
                s->do_telnetopt = 1;
2602
            } else {
2603
                if ((unsigned char)buf[i] == IAC_BREAK && s->do_telnetopt == 2) {
2604
                    /* Handle IAC break commands by sending a serial break */
2605
                    qemu_chr_event(chr, CHR_EVENT_BREAK);
2606
                    s->do_telnetopt++;
2607
                }
2608
                s->do_telnetopt++;
2609
            }
2610
            if (s->do_telnetopt >= 4) {
2611
                s->do_telnetopt = 1;
2612
            }
2613
        } else {
2614
            if ((unsigned char)buf[i] == IAC) {
2615
                s->do_telnetopt = 2;
2616
            } else {
2617
                if (j != i)
2618
                    buf[j] = buf[i];
2619
                j++;
2620
            }
2621
        }
2622
    }
2623
    *size = j;
2624
}
2625

    
2626
static void tcp_chr_read(void *opaque)
2627
{
2628
    CharDriverState *chr = opaque;
2629
    TCPCharDriver *s = chr->opaque;
2630
    uint8_t buf[1024];
2631
    int len, size;
2632

    
2633
    if (!s->connected || s->max_size <= 0)
2634
        return;
2635
    len = sizeof(buf);
2636
    if (len > s->max_size)
2637
        len = s->max_size;
2638
    size = recv(s->fd, buf, len, 0);
2639
    if (size == 0) {
2640
        /* connection closed */
2641
        s->connected = 0;
2642
        if (s->listen_fd >= 0) {
2643
            qemu_set_fd_handler(s->listen_fd, tcp_chr_accept, NULL, chr);
2644
        }
2645
        qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
2646
        closesocket(s->fd);
2647
        s->fd = -1;
2648
    } else if (size > 0) {
2649
        if (s->do_telnetopt)
2650
            tcp_chr_process_IAC_bytes(chr, s, buf, &size);
2651
        if (size > 0)
2652
            qemu_chr_read(chr, buf, size);
2653
    }
2654
}
2655

    
2656
static void tcp_chr_connect(void *opaque)
2657
{
2658
    CharDriverState *chr = opaque;
2659
    TCPCharDriver *s = chr->opaque;
2660

    
2661
    s->connected = 1;
2662
    qemu_set_fd_handler2(s->fd, tcp_chr_read_poll,
2663
                         tcp_chr_read, NULL, chr);
2664
    qemu_chr_reset(chr);
2665
}
2666

    
2667
#define IACSET(x,a,b,c) x[0] = a; x[1] = b; x[2] = c;
2668
static void tcp_chr_telnet_init(int fd)
2669
{
2670
    char buf[3];
2671
    /* Send the telnet negotion to put telnet in binary, no echo, single char mode */
2672
    IACSET(buf, 0xff, 0xfb, 0x01);  /* IAC WILL ECHO */
2673
    send(fd, (char *)buf, 3, 0);
2674
    IACSET(buf, 0xff, 0xfb, 0x03);  /* IAC WILL Suppress go ahead */
2675
    send(fd, (char *)buf, 3, 0);
2676
    IACSET(buf, 0xff, 0xfb, 0x00);  /* IAC WILL Binary */
2677
    send(fd, (char *)buf, 3, 0);
2678
    IACSET(buf, 0xff, 0xfd, 0x00);  /* IAC DO Binary */
2679
    send(fd, (char *)buf, 3, 0);
2680
}
2681

    
2682
static void socket_set_nodelay(int fd)
2683
{
2684
    int val = 1;
2685
    setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char *)&val, sizeof(val));
2686
}
2687

    
2688
static void tcp_chr_accept(void *opaque)
2689
{
2690
    CharDriverState *chr = opaque;
2691
    TCPCharDriver *s = chr->opaque;
2692
    struct sockaddr_in saddr;
2693
#ifndef _WIN32
2694
    struct sockaddr_un uaddr;
2695
#endif
2696
    struct sockaddr *addr;
2697
    socklen_t len;
2698
    int fd;
2699

    
2700
    for(;;) {
2701
#ifndef _WIN32
2702
        if (s->is_unix) {
2703
            len = sizeof(uaddr);
2704
            addr = (struct sockaddr *)&uaddr;
2705
        } else
2706
#endif
2707
        {
2708
            len = sizeof(saddr);
2709
            addr = (struct sockaddr *)&saddr;
2710
        }
2711
        fd = accept(s->listen_fd, addr, &len);
2712
        if (fd < 0 && errno != EINTR) {
2713
            return;
2714
        } else if (fd >= 0) {
2715
            if (s->do_telnetopt)
2716
                tcp_chr_telnet_init(fd);
2717
            break;
2718
        }
2719
    }
2720
    socket_set_nonblock(fd);
2721
    if (s->do_nodelay)
2722
        socket_set_nodelay(fd);
2723
    s->fd = fd;
2724
    qemu_set_fd_handler(s->listen_fd, NULL, NULL, NULL);
2725
    tcp_chr_connect(chr);
2726
}
2727

    
2728
static void tcp_chr_close(CharDriverState *chr)
2729
{
2730
    TCPCharDriver *s = chr->opaque;
2731
    if (s->fd >= 0)
2732
        closesocket(s->fd);
2733
    if (s->listen_fd >= 0)
2734
        closesocket(s->listen_fd);
2735
    qemu_free(s);
2736
}
2737

    
2738
static CharDriverState *qemu_chr_open_tcp(const char *host_str, 
2739
                                          int is_telnet,
2740
                                          int is_unix)
2741
{
2742
    CharDriverState *chr = NULL;
2743
    TCPCharDriver *s = NULL;
2744
    int fd = -1, ret, err, val;
2745
    int is_listen = 0;
2746
    int is_waitconnect = 1;
2747
    int do_nodelay = 0;
2748
    const char *ptr;
2749
    struct sockaddr_in saddr;
2750
#ifndef _WIN32
2751
    struct sockaddr_un uaddr;
2752
#endif
2753
    struct sockaddr *addr;
2754
    socklen_t addrlen;
2755

    
2756
#ifndef _WIN32
2757
    if (is_unix) {
2758
        addr = (struct sockaddr *)&uaddr;
2759
        addrlen = sizeof(uaddr);
2760
        if (parse_unix_path(&uaddr, host_str) < 0)
2761
            goto fail;
2762
    } else
2763
#endif
2764
    {
2765
        addr = (struct sockaddr *)&saddr;
2766
        addrlen = sizeof(saddr);
2767
        if (parse_host_port(&saddr, host_str) < 0)
2768
            goto fail;
2769
    }
2770

    
2771
    ptr = host_str;
2772
    while((ptr = strchr(ptr,','))) {
2773
        ptr++;
2774
        if (!strncmp(ptr,"server",6)) {
2775
            is_listen = 1;
2776
        } else if (!strncmp(ptr,"nowait",6)) {
2777
            is_waitconnect = 0;
2778
        } else if (!strncmp(ptr,"nodelay",6)) {
2779
            do_nodelay = 1;
2780
        } else {
2781
            printf("Unknown option: %s\n", ptr);
2782
            goto fail;
2783
        }
2784
    }
2785
    if (!is_listen)
2786
        is_waitconnect = 0;
2787

    
2788
    chr = qemu_mallocz(sizeof(CharDriverState));
2789
    if (!chr)
2790
        goto fail;
2791
    s = qemu_mallocz(sizeof(TCPCharDriver));
2792
    if (!s)
2793
        goto fail;
2794

    
2795
#ifndef _WIN32
2796
    if (is_unix)
2797
        fd = socket(PF_UNIX, SOCK_STREAM, 0);
2798
    else
2799
#endif
2800
        fd = socket(PF_INET, SOCK_STREAM, 0);
2801
        
2802
    if (fd < 0) 
2803
        goto fail;
2804

    
2805
    if (!is_waitconnect)
2806
        socket_set_nonblock(fd);
2807

    
2808
    s->connected = 0;
2809
    s->fd = -1;
2810
    s->listen_fd = -1;
2811
    s->is_unix = is_unix;
2812
    s->do_nodelay = do_nodelay && !is_unix;
2813

    
2814
    chr->opaque = s;
2815
    chr->chr_write = tcp_chr_write;
2816
    chr->chr_close = tcp_chr_close;
2817

    
2818
    if (is_listen) {
2819
        /* allow fast reuse */
2820
#ifndef _WIN32
2821
        if (is_unix) {
2822
            char path[109];
2823
            strncpy(path, uaddr.sun_path, 108);
2824
            path[108] = 0;
2825
            unlink(path);
2826
        } else
2827
#endif
2828
        {
2829
            val = 1;
2830
            setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const char *)&val, sizeof(val));
2831
        }
2832
        
2833
        ret = bind(fd, addr, addrlen);
2834
        if (ret < 0)
2835
            goto fail;
2836

    
2837
        ret = listen(fd, 0);
2838
        if (ret < 0)
2839
            goto fail;
2840

    
2841
        s->listen_fd = fd;
2842
        qemu_set_fd_handler(s->listen_fd, tcp_chr_accept, NULL, chr);
2843
        if (is_telnet)
2844
            s->do_telnetopt = 1;
2845
    } else {
2846
        for(;;) {
2847
            ret = connect(fd, addr, addrlen);
2848
            if (ret < 0) {
2849
                err = socket_error();
2850
                if (err == EINTR || err == EWOULDBLOCK) {
2851
                } else if (err == EINPROGRESS) {
2852
                    break;
2853
                } else {
2854
                    goto fail;
2855
                }
2856
            } else {
2857
                s->connected = 1;
2858
                break;
2859
            }
2860
        }
2861
        s->fd = fd;
2862
        socket_set_nodelay(fd);
2863
        if (s->connected)
2864
            tcp_chr_connect(chr);
2865
        else
2866
            qemu_set_fd_handler(s->fd, NULL, tcp_chr_connect, chr);
2867
    }
2868
    
2869
    if (is_listen && is_waitconnect) {
2870
        printf("QEMU waiting for connection on: %s\n", host_str);
2871
        tcp_chr_accept(chr);
2872
        socket_set_nonblock(s->listen_fd);
2873
    }
2874

    
2875
    return chr;
2876
 fail:
2877
    if (fd >= 0)
2878
        closesocket(fd);
2879
    qemu_free(s);
2880
    qemu_free(chr);
2881
    return NULL;
2882
}
2883

    
2884
CharDriverState *qemu_chr_open(const char *filename)
2885
{
2886
    const char *p;
2887

    
2888
    if (!strcmp(filename, "vc")) {
2889
        return text_console_init(&display_state);
2890
    } else if (!strcmp(filename, "null")) {
2891
        return qemu_chr_open_null();
2892
    } else 
2893
    if (strstart(filename, "tcp:", &p)) {
2894
        return qemu_chr_open_tcp(p, 0, 0);
2895
    } else
2896
    if (strstart(filename, "telnet:", &p)) {
2897
        return qemu_chr_open_tcp(p, 1, 0);
2898
    } else
2899
    if (strstart(filename, "udp:", &p)) {
2900
        return qemu_chr_open_udp(p);
2901
    } else
2902
    if (strstart(filename, "mon:", &p)) {
2903
        CharDriverState *drv = qemu_chr_open(p);
2904
        if (drv) {
2905
            drv = qemu_chr_open_mux(drv);
2906
            monitor_init(drv, !nographic);
2907
            return drv;
2908
        }
2909
        printf("Unable to open driver: %s\n", p);
2910
        return 0;
2911
    } else
2912
#ifndef _WIN32
2913
    if (strstart(filename, "unix:", &p)) {
2914
        return qemu_chr_open_tcp(p, 0, 1);
2915
    } else if (strstart(filename, "file:", &p)) {
2916
        return qemu_chr_open_file_out(p);
2917
    } else if (strstart(filename, "pipe:", &p)) {
2918
        return qemu_chr_open_pipe(p);
2919
    } else if (!strcmp(filename, "pty")) {
2920
        return qemu_chr_open_pty();
2921
    } else if (!strcmp(filename, "stdio")) {
2922
        return qemu_chr_open_stdio();
2923
    } else 
2924
#endif
2925
#if defined(__linux__)
2926
    if (strstart(filename, "/dev/parport", NULL)) {
2927
        return qemu_chr_open_pp(filename);
2928
    } else 
2929
    if (strstart(filename, "/dev/", NULL)) {
2930
        return qemu_chr_open_tty(filename);
2931
    } else 
2932
#endif
2933
#ifdef _WIN32
2934
    if (strstart(filename, "COM", NULL)) {
2935
        return qemu_chr_open_win(filename);
2936
    } else
2937
    if (strstart(filename, "pipe:", &p)) {
2938
        return qemu_chr_open_win_pipe(p);
2939
    } else
2940
    if (strstart(filename, "file:", &p)) {
2941
        return qemu_chr_open_win_file_out(p);
2942
    }
2943
#endif
2944
    {
2945
        return NULL;
2946
    }
2947
}
2948

    
2949
void qemu_chr_close(CharDriverState *chr)
2950
{
2951
    if (chr->chr_close)
2952
        chr->chr_close(chr);
2953
}
2954

    
2955
/***********************************************************/
2956
/* network device redirectors */
2957

    
2958
void hex_dump(FILE *f, const uint8_t *buf, int size)
2959
{
2960
    int len, i, j, c;
2961

    
2962
    for(i=0;i<size;i+=16) {
2963
        len = size - i;
2964
        if (len > 16)
2965
            len = 16;
2966
        fprintf(f, "%08x ", i);
2967
        for(j=0;j<16;j++) {
2968
            if (j < len)
2969
                fprintf(f, " %02x", buf[i+j]);
2970
            else
2971
                fprintf(f, "   ");
2972
        }
2973
        fprintf(f, " ");
2974
        for(j=0;j<len;j++) {
2975
            c = buf[i+j];
2976
            if (c < ' ' || c > '~')
2977
                c = '.';
2978
            fprintf(f, "%c", c);
2979
        }
2980
        fprintf(f, "\n");
2981
    }
2982
}
2983

    
2984
static int parse_macaddr(uint8_t *macaddr, const char *p)
2985
{
2986
    int i;
2987
    for(i = 0; i < 6; i++) {
2988
        macaddr[i] = strtol(p, (char **)&p, 16);
2989
        if (i == 5) {
2990
            if (*p != '\0') 
2991
                return -1;
2992
        } else {
2993
            if (*p != ':') 
2994
                return -1;
2995
            p++;
2996
        }
2997
    }
2998
    return 0;
2999
}
3000

    
3001
static int get_str_sep(char *buf, int buf_size, const char **pp, int sep)
3002
{
3003
    const char *p, *p1;
3004
    int len;
3005
    p = *pp;
3006
    p1 = strchr(p, sep);
3007
    if (!p1)
3008
        return -1;
3009
    len = p1 - p;
3010
    p1++;
3011
    if (buf_size > 0) {
3012
        if (len > buf_size - 1)
3013
            len = buf_size - 1;
3014
        memcpy(buf, p, len);
3015
        buf[len] = '\0';
3016
    }
3017
    *pp = p1;
3018
    return 0;
3019
}
3020

    
3021
int parse_host_src_port(struct sockaddr_in *haddr,
3022
                        struct sockaddr_in *saddr,
3023
                        const char *input_str)
3024
{
3025
    char *str = strdup(input_str);
3026
    char *host_str = str;
3027
    char *src_str;
3028
    char *ptr;
3029

    
3030
    /*
3031
     * Chop off any extra arguments at the end of the string which
3032
     * would start with a comma, then fill in the src port information
3033
     * if it was provided else use the "any address" and "any port".
3034
     */
3035
    if ((ptr = strchr(str,',')))
3036
        *ptr = '\0';
3037

    
3038
    if ((src_str = strchr(input_str,'@'))) {
3039
        *src_str = '\0';
3040
        src_str++;
3041
    }
3042

    
3043
    if (parse_host_port(haddr, host_str) < 0)
3044
        goto fail;
3045

    
3046
    if (!src_str || *src_str == '\0')
3047
        src_str = ":0";
3048

    
3049
    if (parse_host_port(saddr, src_str) < 0)
3050
        goto fail;
3051

    
3052
    free(str);
3053
    return(0);
3054

    
3055
fail:
3056
    free(str);
3057
    return -1;
3058
}
3059

    
3060
int parse_host_port(struct sockaddr_in *saddr, const char *str)
3061
{
3062
    char buf[512];
3063
    struct hostent *he;
3064
    const char *p, *r;
3065
    int port;
3066

    
3067
    p = str;
3068
    if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
3069
        return -1;
3070
    saddr->sin_family = AF_INET;
3071
    if (buf[0] == '\0') {
3072
        saddr->sin_addr.s_addr = 0;
3073
    } else {
3074
        if (isdigit(buf[0])) {
3075
            if (!inet_aton(buf, &saddr->sin_addr))
3076
                return -1;
3077
        } else {
3078
            if ((he = gethostbyname(buf)) == NULL)
3079
                return - 1;
3080
            saddr->sin_addr = *(struct in_addr *)he->h_addr;
3081
        }
3082
    }
3083
    port = strtol(p, (char **)&r, 0);
3084
    if (r == p)
3085
        return -1;
3086
    saddr->sin_port = htons(port);
3087
    return 0;
3088
}
3089

    
3090
#ifndef _WIN32
3091
static int parse_unix_path(struct sockaddr_un *uaddr, const char *str)
3092
{
3093
    const char *p;
3094
    int len;
3095

    
3096
    len = MIN(108, strlen(str));
3097
    p = strchr(str, ',');
3098
    if (p)
3099
        len = MIN(len, p - str);
3100

    
3101
    memset(uaddr, 0, sizeof(*uaddr));
3102

    
3103
    uaddr->sun_family = AF_UNIX;
3104
    memcpy(uaddr->sun_path, str, len);
3105

    
3106
    return 0;
3107
}
3108
#endif
3109

    
3110
/* find or alloc a new VLAN */
3111
VLANState *qemu_find_vlan(int id)
3112
{
3113
    VLANState **pvlan, *vlan;
3114
    for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) {
3115
        if (vlan->id == id)
3116
            return vlan;
3117
    }
3118
    vlan = qemu_mallocz(sizeof(VLANState));
3119
    if (!vlan)
3120
        return NULL;
3121
    vlan->id = id;
3122
    vlan->next = NULL;
3123
    pvlan = &first_vlan;
3124
    while (*pvlan != NULL)
3125
        pvlan = &(*pvlan)->next;
3126
    *pvlan = vlan;
3127
    return vlan;
3128
}
3129

    
3130
VLANClientState *qemu_new_vlan_client(VLANState *vlan,
3131
                                      IOReadHandler *fd_read,
3132
                                      IOCanRWHandler *fd_can_read,
3133
                                      void *opaque)
3134
{
3135
    VLANClientState *vc, **pvc;
3136
    vc = qemu_mallocz(sizeof(VLANClientState));
3137
    if (!vc)
3138
        return NULL;
3139
    vc->fd_read = fd_read;
3140
    vc->fd_can_read = fd_can_read;
3141
    vc->opaque = opaque;
3142
    vc->vlan = vlan;
3143

    
3144
    vc->next = NULL;
3145
    pvc = &vlan->first_client;
3146
    while (*pvc != NULL)
3147
        pvc = &(*pvc)->next;
3148
    *pvc = vc;
3149
    return vc;
3150
}
3151

    
3152
int qemu_can_send_packet(VLANClientState *vc1)
3153
{
3154
    VLANState *vlan = vc1->vlan;
3155
    VLANClientState *vc;
3156

    
3157
    for(vc = vlan->first_client; vc != NULL; vc = vc->next) {
3158
        if (vc != vc1) {
3159
            if (vc->fd_can_read && !vc->fd_can_read(vc->opaque))
3160
                return 0;
3161
        }
3162
    }
3163
    return 1;
3164
}
3165

    
3166
void qemu_send_packet(VLANClientState *vc1, const uint8_t *buf, int size)
3167
{
3168
    VLANState *vlan = vc1->vlan;
3169
    VLANClientState *vc;
3170

    
3171
#if 0
3172
    printf("vlan %d send:\n", vlan->id);
3173
    hex_dump(stdout, buf, size);
3174
#endif
3175
    for(vc = vlan->first_client; vc != NULL; vc = vc->next) {
3176
        if (vc != vc1) {
3177
            vc->fd_read(vc->opaque, buf, size);
3178
        }
3179
    }
3180
}
3181

    
3182
#if defined(CONFIG_SLIRP)
3183

    
3184
/* slirp network adapter */
3185

    
3186
static int slirp_inited;
3187
static VLANClientState *slirp_vc;
3188

    
3189
int slirp_can_output(void)
3190
{
3191
    return !slirp_vc || qemu_can_send_packet(slirp_vc);
3192
}
3193

    
3194
void slirp_output(const uint8_t *pkt, int pkt_len)
3195
{
3196
#if 0
3197
    printf("slirp output:\n");
3198
    hex_dump(stdout, pkt, pkt_len);
3199
#endif
3200
    if (!slirp_vc)
3201
        return;
3202
    qemu_send_packet(slirp_vc, pkt, pkt_len);
3203
}
3204

    
3205
static void slirp_receive(void *opaque, const uint8_t *buf, int size)
3206
{
3207
#if 0
3208
    printf("slirp input:\n");
3209
    hex_dump(stdout, buf, size);
3210
#endif
3211
    slirp_input(buf, size);
3212
}
3213

    
3214
static int net_slirp_init(VLANState *vlan)
3215
{
3216
    if (!slirp_inited) {
3217
        slirp_inited = 1;
3218
        slirp_init();
3219
    }
3220
    slirp_vc = qemu_new_vlan_client(vlan, 
3221
                                    slirp_receive, NULL, NULL);
3222
    snprintf(slirp_vc->info_str, sizeof(slirp_vc->info_str), "user redirector");
3223
    return 0;
3224
}
3225

    
3226
static void net_slirp_redir(const char *redir_str)
3227
{
3228
    int is_udp;
3229
    char buf[256], *r;
3230
    const char *p;
3231
    struct in_addr guest_addr;
3232
    int host_port, guest_port;
3233
    
3234
    if (!slirp_inited) {
3235
        slirp_inited = 1;
3236
        slirp_init();
3237
    }
3238

    
3239
    p = redir_str;
3240
    if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
3241
        goto fail;
3242
    if (!strcmp(buf, "tcp")) {
3243
        is_udp = 0;
3244
    } else if (!strcmp(buf, "udp")) {
3245
        is_udp = 1;
3246
    } else {
3247
        goto fail;
3248
    }
3249

    
3250
    if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
3251
        goto fail;
3252
    host_port = strtol(buf, &r, 0);
3253
    if (r == buf)
3254
        goto fail;
3255

    
3256
    if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
3257
        goto fail;
3258
    if (buf[0] == '\0') {
3259
        pstrcpy(buf, sizeof(buf), "10.0.2.15");
3260
    }
3261
    if (!inet_aton(buf, &guest_addr))
3262
        goto fail;
3263
    
3264
    guest_port = strtol(p, &r, 0);
3265
    if (r == p)
3266
        goto fail;
3267
    
3268
    if (slirp_redir(is_udp, host_port, guest_addr, guest_port) < 0) {
3269
        fprintf(stderr, "qemu: could not set up redirection\n");
3270
        exit(1);
3271
    }
3272
    return;
3273
 fail:
3274
    fprintf(stderr, "qemu: syntax: -redir [tcp|udp]:host-port:[guest-host]:guest-port\n");
3275
    exit(1);
3276
}
3277
    
3278
#ifndef _WIN32
3279

    
3280
char smb_dir[1024];
3281

    
3282
static void smb_exit(void)
3283
{
3284
    DIR *d;
3285
    struct dirent *de;
3286
    char filename[1024];
3287

    
3288
    /* erase all the files in the directory */
3289
    d = opendir(smb_dir);
3290
    for(;;) {
3291
        de = readdir(d);
3292
        if (!de)
3293
            break;
3294
        if (strcmp(de->d_name, ".") != 0 &&
3295
            strcmp(de->d_name, "..") != 0) {
3296
            snprintf(filename, sizeof(filename), "%s/%s", 
3297
                     smb_dir, de->d_name);
3298
            unlink(filename);
3299
        }
3300
    }
3301
    closedir(d);
3302
    rmdir(smb_dir);
3303
}
3304

    
3305
/* automatic user mode samba server configuration */
3306
void net_slirp_smb(const char *exported_dir)
3307
{
3308
    char smb_conf[1024];
3309
    char smb_cmdline[1024];
3310
    FILE *f;
3311

    
3312
    if (!slirp_inited) {
3313
        slirp_inited = 1;
3314
        slirp_init();
3315
    }
3316

    
3317
    /* XXX: better tmp dir construction */
3318
    snprintf(smb_dir, sizeof(smb_dir), "/tmp/qemu-smb.%d", getpid());
3319
    if (mkdir(smb_dir, 0700) < 0) {
3320
        fprintf(stderr, "qemu: could not create samba server dir '%s'\n", smb_dir);
3321
        exit(1);
3322
    }
3323
    snprintf(smb_conf, sizeof(smb_conf), "%s/%s", smb_dir, "smb.conf");
3324
    
3325
    f = fopen(smb_conf, "w");
3326
    if (!f) {
3327
        fprintf(stderr, "qemu: could not create samba server configuration file '%s'\n", smb_conf);
3328
        exit(1);
3329
    }
3330
    fprintf(f, 
3331
            "[global]\n"
3332
            "private dir=%s\n"
3333
            "smb ports=0\n"
3334
            "socket address=127.0.0.1\n"
3335
            "pid directory=%s\n"
3336
            "lock directory=%s\n"
3337
            "log file=%s/log.smbd\n"
3338
            "smb passwd file=%s/smbpasswd\n"
3339
            "security = share\n"
3340
            "[qemu]\n"
3341
            "path=%s\n"
3342
            "read only=no\n"
3343
            "guest ok=yes\n",
3344
            smb_dir,
3345
            smb_dir,
3346
            smb_dir,
3347
            smb_dir,
3348
            smb_dir,
3349
            exported_dir
3350
            );
3351
    fclose(f);
3352
    atexit(smb_exit);
3353

    
3354
    snprintf(smb_cmdline, sizeof(smb_cmdline), "%s -s %s",
3355
             SMBD_COMMAND, smb_conf);
3356
    
3357
    slirp_add_exec(0, smb_cmdline, 4, 139);
3358
}
3359

    
3360
#endif /* !defined(_WIN32) */
3361

    
3362
#endif /* CONFIG_SLIRP */
3363

    
3364
#if !defined(_WIN32)
3365

    
3366
typedef struct TAPState {
3367
    VLANClientState *vc;
3368
    int fd;
3369
} TAPState;
3370

    
3371
static void tap_receive(void *opaque, const uint8_t *buf, int size)
3372
{
3373
    TAPState *s = opaque;
3374
    int ret;
3375
    for(;;) {
3376
        ret = write(s->fd, buf, size);
3377
        if (ret < 0 && (errno == EINTR || errno == EAGAIN)) {
3378
        } else {
3379
            break;
3380
        }
3381
    }
3382
}
3383

    
3384
static void tap_send(void *opaque)
3385
{
3386
    TAPState *s = opaque;
3387
    uint8_t buf[4096];
3388
    int size;
3389

    
3390
#ifdef __sun__
3391
    struct strbuf sbuf;
3392
    int f = 0;
3393
    sbuf.maxlen = sizeof(buf);
3394
    sbuf.buf = buf;
3395
    size = getmsg(s->fd, NULL, &sbuf, &f) >=0 ? sbuf.len : -1;
3396
#else
3397
    size = read(s->fd, buf, sizeof(buf));
3398
#endif
3399
    if (size > 0) {
3400
        qemu_send_packet(s->vc, buf, size);
3401
    }
3402
}
3403

    
3404
/* fd support */
3405

    
3406
static TAPState *net_tap_fd_init(VLANState *vlan, int fd)
3407
{
3408
    TAPState *s;
3409

    
3410
    s = qemu_mallocz(sizeof(TAPState));
3411
    if (!s)
3412
        return NULL;
3413
    s->fd = fd;
3414
    s->vc = qemu_new_vlan_client(vlan, tap_receive, NULL, s);
3415
    qemu_set_fd_handler(s->fd, tap_send, NULL, s);
3416
    snprintf(s->vc->info_str, sizeof(s->vc->info_str), "tap: fd=%d", fd);
3417
    return s;
3418
}
3419

    
3420
#ifdef _BSD
3421
static int tap_open(char *ifname, int ifname_size)
3422
{
3423
    int fd;
3424
    char *dev;
3425
    struct stat s;
3426

    
3427
    fd = open("/dev/tap", O_RDWR);
3428
    if (fd < 0) {
3429
        fprintf(stderr, "warning: could not open /dev/tap: no virtual network emulation\n");
3430
        return -1;
3431
    }
3432

    
3433
    fstat(fd, &s);
3434
    dev = devname(s.st_rdev, S_IFCHR);
3435
    pstrcpy(ifname, ifname_size, dev);
3436

    
3437
    fcntl(fd, F_SETFL, O_NONBLOCK);
3438
    return fd;
3439
}
3440
#elif defined(__sun__)
3441
#define TUNNEWPPA       (('T'<<16) | 0x0001)
3442
/* 
3443
 * Allocate TAP device, returns opened fd. 
3444
 * Stores dev name in the first arg(must be large enough).
3445
 */  
3446
int tap_alloc(char *dev)
3447
{
3448
    int tap_fd, if_fd, ppa = -1;
3449
    static int ip_fd = 0;
3450
    char *ptr;
3451

    
3452
    static int arp_fd = 0;
3453
    int ip_muxid, arp_muxid;
3454
    struct strioctl  strioc_if, strioc_ppa;
3455
    int link_type = I_PLINK;;
3456
    struct lifreq ifr;
3457
    char actual_name[32] = "";
3458

    
3459
    memset(&ifr, 0x0, sizeof(ifr));
3460

    
3461
    if( *dev ){
3462
       ptr = dev;        
3463
       while( *ptr && !isdigit((int)*ptr) ) ptr++; 
3464
       ppa = atoi(ptr);
3465
    }
3466

    
3467
    /* Check if IP device was opened */
3468
    if( ip_fd )
3469
       close(ip_fd);
3470

    
3471
    if( (ip_fd = open("/dev/udp", O_RDWR, 0)) < 0){
3472
       syslog(LOG_ERR, "Can't open /dev/ip (actually /dev/udp)");
3473
       return -1;
3474
    }
3475

    
3476
    if( (tap_fd = open("/dev/tap", O_RDWR, 0)) < 0){
3477
       syslog(LOG_ERR, "Can't open /dev/tap");
3478
       return -1;
3479
    }
3480

    
3481
    /* Assign a new PPA and get its unit number. */
3482
    strioc_ppa.ic_cmd = TUNNEWPPA;
3483
    strioc_ppa.ic_timout = 0;
3484
    strioc_ppa.ic_len = sizeof(ppa);
3485
    strioc_ppa.ic_dp = (char *)&ppa;
3486
    if ((ppa = ioctl (tap_fd, I_STR, &strioc_ppa)) < 0)
3487
       syslog (LOG_ERR, "Can't assign new interface");
3488

    
3489
    if( (if_fd = open("/dev/tap", O_RDWR, 0)) < 0){
3490
       syslog(LOG_ERR, "Can't open /dev/tap (2)");
3491
       return -1;
3492
    }
3493
    if(ioctl(if_fd, I_PUSH, "ip") < 0){
3494
       syslog(LOG_ERR, "Can't push IP module");
3495
       return -1;
3496
    }
3497

    
3498
    if (ioctl(if_fd, SIOCGLIFFLAGS, &ifr) < 0)
3499
        syslog(LOG_ERR, "Can't get flags\n");
3500

    
3501
    snprintf (actual_name, 32, "tap%d", ppa);
3502
    strncpy (ifr.lifr_name, actual_name, sizeof (ifr.lifr_name));
3503

    
3504
    ifr.lifr_ppa = ppa;
3505
    /* Assign ppa according to the unit number returned by tun device */
3506

    
3507
    if (ioctl (if_fd, SIOCSLIFNAME, &ifr) < 0)
3508
        syslog (LOG_ERR, "Can't set PPA %d", ppa);
3509
    if (ioctl(if_fd, SIOCGLIFFLAGS, &ifr) <0)
3510
        syslog (LOG_ERR, "Can't get flags\n");
3511
    /* Push arp module to if_fd */
3512
    if (ioctl (if_fd, I_PUSH, "arp") < 0)
3513
        syslog (LOG_ERR, "Can't push ARP module (2)");
3514

    
3515
    /* Push arp module to ip_fd */
3516
    if (ioctl (ip_fd, I_POP, NULL) < 0)
3517
        syslog (LOG_ERR, "I_POP failed\n");
3518
    if (ioctl (ip_fd, I_PUSH, "arp") < 0)
3519
        syslog (LOG_ERR, "Can't push ARP module (3)\n");
3520
    /* Open arp_fd */
3521
    if ((arp_fd = open ("/dev/tap", O_RDWR, 0)) < 0)
3522
       syslog (LOG_ERR, "Can't open %s\n", "/dev/tap");
3523

    
3524
    /* Set ifname to arp */
3525
    strioc_if.ic_cmd = SIOCSLIFNAME;
3526
    strioc_if.ic_timout = 0;
3527
    strioc_if.ic_len = sizeof(ifr);
3528
    strioc_if.ic_dp = (char *)&ifr;
3529
    if (ioctl(arp_fd, I_STR, &strioc_if) < 0){
3530
        syslog (LOG_ERR, "Can't set ifname to arp\n");
3531
    }
3532

    
3533
    if((ip_muxid = ioctl(ip_fd, I_LINK, if_fd)) < 0){
3534
       syslog(LOG_ERR, "Can't link TAP device to IP");
3535
       return -1;
3536
    }
3537

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

    
3541
    close (if_fd);
3542

    
3543
    memset(&ifr, 0x0, sizeof(ifr));
3544
    strncpy (ifr.lifr_name, actual_name, sizeof (ifr.lifr_name));
3545
    ifr.lifr_ip_muxid  = ip_muxid;
3546
    ifr.lifr_arp_muxid = arp_muxid;
3547

    
3548
    if (ioctl (ip_fd, SIOCSLIFMUXID, &ifr) < 0)
3549
    {
3550
      ioctl (ip_fd, I_PUNLINK , arp_muxid);
3551
      ioctl (ip_fd, I_PUNLINK, ip_muxid);
3552
      syslog (LOG_ERR, "Can't set multiplexor id");
3553
    }
3554

    
3555
    sprintf(dev, "tap%d", ppa);
3556
    return tap_fd;
3557
}
3558

    
3559
static int tap_open(char *ifname, int ifname_size)
3560
{
3561
    char  dev[10]="";
3562
    int fd;
3563
    if( (fd = tap_alloc(dev)) < 0 ){
3564
       fprintf(stderr, "Cannot allocate TAP device\n");
3565
       return -1;
3566
    }
3567
    pstrcpy(ifname, ifname_size, dev);
3568
    fcntl(fd, F_SETFL, O_NONBLOCK);
3569
    return fd;
3570
}
3571
#else
3572
static int tap_open(char *ifname, int ifname_size)
3573
{
3574
    struct ifreq ifr;
3575
    int fd, ret;
3576
    
3577
    fd = open("/dev/net/tun", O_RDWR);
3578
    if (fd < 0) {
3579
        fprintf(stderr, "warning: could not open /dev/net/tun: no virtual network emulation\n");
3580
        return -1;
3581
    }
3582
    memset(&ifr, 0, sizeof(ifr));
3583
    ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
3584
    if (ifname[0] != '\0')
3585
        pstrcpy(ifr.ifr_name, IFNAMSIZ, ifname);
3586
    else
3587
        pstrcpy(ifr.ifr_name, IFNAMSIZ, "tap%d");
3588
    ret = ioctl(fd, TUNSETIFF, (void *) &ifr);
3589
    if (ret != 0) {
3590
        fprintf(stderr, "warning: could not configure /dev/net/tun: no virtual network emulation\n");
3591
        close(fd);
3592
        return -1;
3593
    }
3594
    pstrcpy(ifname, ifname_size, ifr.ifr_name);
3595
    fcntl(fd, F_SETFL, O_NONBLOCK);
3596
    return fd;
3597
}
3598
#endif
3599

    
3600
static int net_tap_init(VLANState *vlan, const char *ifname1,
3601
                        const char *setup_script)
3602
{
3603
    TAPState *s;
3604
    int pid, status, fd;
3605
    char *args[3];
3606
    char **parg;
3607
    char ifname[128];
3608

    
3609
    if (ifname1 != NULL)
3610
        pstrcpy(ifname, sizeof(ifname), ifname1);
3611
    else
3612
        ifname[0] = '\0';
3613
    fd = tap_open(ifname, sizeof(ifname));
3614
    if (fd < 0)
3615
        return -1;
3616

    
3617
    if (!setup_script || !strcmp(setup_script, "no"))
3618
        setup_script = "";
3619
    if (setup_script[0] != '\0') {
3620
        /* try to launch network init script */
3621
        pid = fork();
3622
        if (pid >= 0) {
3623
            if (pid == 0) {
3624
                int open_max = sysconf (_SC_OPEN_MAX), i;
3625
                for (i = 0; i < open_max; i++)
3626
                    if (i != STDIN_FILENO &&
3627
                        i != STDOUT_FILENO &&
3628
                        i != STDERR_FILENO &&
3629
                        i != fd)
3630
                        close(i);
3631

    
3632
                parg = args;
3633
                *parg++ = (char *)setup_script;
3634
                *parg++ = ifname;
3635
                *parg++ = NULL;
3636
                execv(setup_script, args);
3637
                _exit(1);
3638
            }
3639
            while (waitpid(pid, &status, 0) != pid);
3640
            if (!WIFEXITED(status) ||
3641
                WEXITSTATUS(status) != 0) {
3642
                fprintf(stderr, "%s: could not launch network script\n",
3643
                        setup_script);
3644
                return -1;
3645
            }
3646
        }
3647
    }
3648
    s = net_tap_fd_init(vlan, fd);
3649
    if (!s)
3650
        return -1;
3651
    snprintf(s->vc->info_str, sizeof(s->vc->info_str), 
3652
             "tap: ifname=%s setup_script=%s", ifname, setup_script);
3653
    return 0;
3654
}
3655

    
3656
#endif /* !_WIN32 */
3657

    
3658
/* network connection */
3659
typedef struct NetSocketState {
3660
    VLANClientState *vc;
3661
    int fd;
3662
    int state; /* 0 = getting length, 1 = getting data */
3663
    int index;
3664
    int packet_len;
3665
    uint8_t buf[4096];
3666
    struct sockaddr_in dgram_dst; /* contains inet host and port destination iff connectionless (SOCK_DGRAM) */
3667
} NetSocketState;
3668

    
3669
typedef struct NetSocketListenState {
3670
    VLANState *vlan;
3671
    int fd;
3672
} NetSocketListenState;
3673

    
3674
/* XXX: we consider we can send the whole packet without blocking */
3675
static void net_socket_receive(void *opaque, const uint8_t *buf, int size)
3676
{
3677
    NetSocketState *s = opaque;
3678
    uint32_t len;
3679
    len = htonl(size);
3680

    
3681
    send_all(s->fd, (const uint8_t *)&len, sizeof(len));
3682
    send_all(s->fd, buf, size);
3683
}
3684

    
3685
static void net_socket_receive_dgram(void *opaque, const uint8_t *buf, int size)
3686
{
3687
    NetSocketState *s = opaque;
3688
    sendto(s->fd, buf, size, 0, 
3689
           (struct sockaddr *)&s->dgram_dst, sizeof(s->dgram_dst));
3690
}
3691

    
3692
static void net_socket_send(void *opaque)
3693
{
3694
    NetSocketState *s = opaque;
3695
    int l, size, err;
3696
    uint8_t buf1[4096];
3697
    const uint8_t *buf;
3698

    
3699
    size = recv(s->fd, buf1, sizeof(buf1), 0);
3700
    if (size < 0) {
3701
        err = socket_error();
3702
        if (err != EWOULDBLOCK) 
3703
            goto eoc;
3704
    } else if (size == 0) {
3705
        /* end of connection */
3706
    eoc:
3707
        qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
3708
        closesocket(s->fd);
3709
        return;
3710
    }
3711
    buf = buf1;
3712
    while (size > 0) {
3713
        /* reassemble a packet from the network */
3714
        switch(s->state) {
3715
        case 0:
3716
            l = 4 - s->index;
3717
            if (l > size)
3718
                l = size;
3719
            memcpy(s->buf + s->index, buf, l);
3720
            buf += l;
3721
            size -= l;
3722
            s->index += l;
3723
            if (s->index == 4) {
3724
                /* got length */
3725
                s->packet_len = ntohl(*(uint32_t *)s->buf);
3726
                s->index = 0;
3727
                s->state = 1;
3728
            }
3729
            break;
3730
        case 1:
3731
            l = s->packet_len - s->index;
3732
            if (l > size)
3733
                l = size;
3734
            memcpy(s->buf + s->index, buf, l);
3735
            s->index += l;
3736
            buf += l;
3737
            size -= l;
3738
            if (s->index >= s->packet_len) {
3739
                qemu_send_packet(s->vc, s->buf, s->packet_len);
3740
                s->index = 0;
3741
                s->state = 0;
3742
            }
3743
            break;
3744
        }
3745
    }
3746
}
3747

    
3748
static void net_socket_send_dgram(void *opaque)
3749
{
3750
    NetSocketState *s = opaque;
3751
    int size;
3752

    
3753
    size = recv(s->fd, s->buf, sizeof(s->buf), 0);
3754
    if (size < 0) 
3755
        return;
3756
    if (size == 0) {
3757
        /* end of connection */
3758
        qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
3759
        return;
3760
    }
3761
    qemu_send_packet(s->vc, s->buf, size);
3762
}
3763

    
3764
static int net_socket_mcast_create(struct sockaddr_in *mcastaddr)
3765
{
3766
    struct ip_mreq imr;
3767
    int fd;
3768
    int val, ret;
3769
    if (!IN_MULTICAST(ntohl(mcastaddr->sin_addr.s_addr))) {
3770
        fprintf(stderr, "qemu: error: specified mcastaddr \"%s\" (0x%08x) does not contain a multicast address\n",
3771
                inet_ntoa(mcastaddr->sin_addr), 
3772
                (int)ntohl(mcastaddr->sin_addr.s_addr));
3773
        return -1;
3774

    
3775
    }
3776
    fd = socket(PF_INET, SOCK_DGRAM, 0);
3777
    if (fd < 0) {
3778
        perror("socket(PF_INET, SOCK_DGRAM)");
3779
        return -1;
3780
    }
3781

    
3782
    val = 1;
3783
    ret=setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, 
3784
                   (const char *)&val, sizeof(val));
3785
    if (ret < 0) {
3786
        perror("setsockopt(SOL_SOCKET, SO_REUSEADDR)");
3787
        goto fail;
3788
    }
3789

    
3790
    ret = bind(fd, (struct sockaddr *)mcastaddr, sizeof(*mcastaddr));
3791
    if (ret < 0) {
3792
        perror("bind");
3793
        goto fail;
3794
    }
3795
    
3796
    /* Add host to multicast group */
3797
    imr.imr_multiaddr = mcastaddr->sin_addr;
3798
    imr.imr_interface.s_addr = htonl(INADDR_ANY);
3799

    
3800
    ret = setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, 
3801
                     (const char *)&imr, sizeof(struct ip_mreq));
3802
    if (ret < 0) {
3803
        perror("setsockopt(IP_ADD_MEMBERSHIP)");
3804
        goto fail;
3805
    }
3806

    
3807
    /* Force mcast msgs to loopback (eg. several QEMUs in same host */
3808
    val = 1;
3809
    ret=setsockopt(fd, IPPROTO_IP, IP_MULTICAST_LOOP, 
3810
                   (const char *)&val, sizeof(val));
3811
    if (ret < 0) {
3812
        perror("setsockopt(SOL_IP, IP_MULTICAST_LOOP)");
3813
        goto fail;
3814
    }
3815

    
3816
    socket_set_nonblock(fd);
3817
    return fd;
3818
fail:
3819
    if (fd >= 0) 
3820
        closesocket(fd);
3821
    return -1;
3822
}
3823

    
3824
static NetSocketState *net_socket_fd_init_dgram(VLANState *vlan, int fd, 
3825
                                          int is_connected)
3826
{
3827
    struct sockaddr_in saddr;
3828
    int newfd;
3829
    socklen_t saddr_len;
3830
    NetSocketState *s;
3831

    
3832
    /* fd passed: multicast: "learn" dgram_dst address from bound address and save it
3833
     * Because this may be "shared" socket from a "master" process, datagrams would be recv() 
3834
     * by ONLY ONE process: we must "clone" this dgram socket --jjo
3835
     */
3836

    
3837
    if (is_connected) {
3838
        if (getsockname(fd, (struct sockaddr *) &saddr, &saddr_len) == 0) {
3839
            /* must be bound */
3840
            if (saddr.sin_addr.s_addr==0) {
3841
                fprintf(stderr, "qemu: error: init_dgram: fd=%d unbound, cannot setup multicast dst addr\n",
3842
                        fd);
3843
                return NULL;
3844
            }
3845
            /* clone dgram socket */
3846
            newfd = net_socket_mcast_create(&saddr);
3847
            if (newfd < 0) {
3848
                /* error already reported by net_socket_mcast_create() */
3849
                close(fd);
3850
                return NULL;
3851
            }
3852
            /* clone newfd to fd, close newfd */
3853
            dup2(newfd, fd);
3854
            close(newfd);
3855
        
3856
        } else {
3857
            fprintf(stderr, "qemu: error: init_dgram: fd=%d failed getsockname(): %s\n",
3858
                    fd, strerror(errno));
3859
            return NULL;
3860
        }
3861
    }
3862

    
3863
    s = qemu_mallocz(sizeof(NetSocketState));
3864
    if (!s)
3865
        return NULL;
3866
    s->fd = fd;
3867

    
3868
    s->vc = qemu_new_vlan_client(vlan, net_socket_receive_dgram, NULL, s);
3869
    qemu_set_fd_handler(s->fd, net_socket_send_dgram, NULL, s);
3870

    
3871
    /* mcast: save bound address as dst */
3872
    if (is_connected) s->dgram_dst=saddr;
3873

    
3874
    snprintf(s->vc->info_str, sizeof(s->vc->info_str),
3875
            "socket: fd=%d (%s mcast=%s:%d)", 
3876
            fd, is_connected? "cloned" : "",
3877
            inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
3878
    return s;
3879
}
3880

    
3881
static void net_socket_connect(void *opaque)
3882
{
3883
    NetSocketState *s = opaque;
3884
    qemu_set_fd_handler(s->fd, net_socket_send, NULL, s);
3885
}
3886

    
3887
static NetSocketState *net_socket_fd_init_stream(VLANState *vlan, int fd, 
3888
                                          int is_connected)
3889
{
3890
    NetSocketState *s;
3891
    s = qemu_mallocz(sizeof(NetSocketState));
3892
    if (!s)
3893
        return NULL;
3894
    s->fd = fd;
3895
    s->vc = qemu_new_vlan_client(vlan, 
3896
                                 net_socket_receive, NULL, s);
3897
    snprintf(s->vc->info_str, sizeof(s->vc->info_str),
3898
             "socket: fd=%d", fd);
3899
    if (is_connected) {
3900
        net_socket_connect(s);
3901
    } else {
3902
        qemu_set_fd_handler(s->fd, NULL, net_socket_connect, s);
3903
    }
3904
    return s;
3905
}
3906

    
3907
static NetSocketState *net_socket_fd_init(VLANState *vlan, int fd, 
3908
                                          int is_connected)
3909
{
3910
    int so_type=-1, optlen=sizeof(so_type);
3911

    
3912
    if(getsockopt(fd, SOL_SOCKET, SO_TYPE, (char *)&so_type, &optlen)< 0) {
3913
        fprintf(stderr, "qemu: error: setsockopt(SO_TYPE) for fd=%d failed\n", fd);
3914
        return NULL;
3915
    }
3916
    switch(so_type) {
3917
    case SOCK_DGRAM:
3918
        return net_socket_fd_init_dgram(vlan, fd, is_connected);
3919
    case SOCK_STREAM:
3920
        return net_socket_fd_init_stream(vlan, fd, is_connected);
3921
    default:
3922
        /* who knows ... this could be a eg. a pty, do warn and continue as stream */
3923
        fprintf(stderr, "qemu: warning: socket type=%d for fd=%d is not SOCK_DGRAM or SOCK_STREAM\n", so_type, fd);
3924
        return net_socket_fd_init_stream(vlan, fd, is_connected);
3925
    }
3926
    return NULL;
3927
}
3928

    
3929
static void net_socket_accept(void *opaque)
3930
{
3931
    NetSocketListenState *s = opaque;    
3932
    NetSocketState *s1;
3933
    struct sockaddr_in saddr;
3934
    socklen_t len;
3935
    int fd;
3936

    
3937
    for(;;) {
3938
        len = sizeof(saddr);
3939
        fd = accept(s->fd, (struct sockaddr *)&saddr, &len);
3940
        if (fd < 0 && errno != EINTR) {
3941
            return;
3942
        } else if (fd >= 0) {
3943
            break;
3944
        }
3945
    }
3946
    s1 = net_socket_fd_init(s->vlan, fd, 1); 
3947
    if (!s1) {
3948
        closesocket(fd);
3949
    } else {
3950
        snprintf(s1->vc->info_str, sizeof(s1->vc->info_str),
3951
                 "socket: connection from %s:%d", 
3952
                 inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
3953
    }
3954
}
3955

    
3956
static int net_socket_listen_init(VLANState *vlan, const char *host_str)
3957
{
3958
    NetSocketListenState *s;
3959
    int fd, val, ret;
3960
    struct sockaddr_in saddr;
3961

    
3962
    if (parse_host_port(&saddr, host_str) < 0)
3963
        return -1;
3964
    
3965
    s = qemu_mallocz(sizeof(NetSocketListenState));
3966
    if (!s)
3967
        return -1;
3968

    
3969
    fd = socket(PF_INET, SOCK_STREAM, 0);
3970
    if (fd < 0) {
3971
        perror("socket");
3972
        return -1;
3973
    }
3974
    socket_set_nonblock(fd);
3975

    
3976
    /* allow fast reuse */
3977
    val = 1;
3978
    setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const char *)&val, sizeof(val));
3979
    
3980
    ret = bind(fd, (struct sockaddr *)&saddr, sizeof(saddr));
3981
    if (ret < 0) {
3982
        perror("bind");
3983
        return -1;
3984
    }
3985
    ret = listen(fd, 0);
3986
    if (ret < 0) {
3987
        perror("listen");
3988
        return -1;
3989
    }
3990
    s->vlan = vlan;
3991
    s->fd = fd;
3992
    qemu_set_fd_handler(fd, net_socket_accept, NULL, s);
3993
    return 0;
3994
}
3995

    
3996
static int net_socket_connect_init(VLANState *vlan, const char *host_str)
3997
{
3998
    NetSocketState *s;
3999
    int fd, connected, ret, err;
4000
    struct sockaddr_in saddr;
4001

    
4002
    if (parse_host_port(&saddr, host_str) < 0)
4003
        return -1;
4004

    
4005
    fd = socket(PF_INET, SOCK_STREAM, 0);
4006
    if (fd < 0) {
4007
        perror("socket");
4008
        return -1;
4009
    }
4010
    socket_set_nonblock(fd);
4011

    
4012
    connected = 0;
4013
    for(;;) {
4014
        ret = connect(fd, (struct sockaddr *)&saddr, sizeof(saddr));
4015
        if (ret < 0) {
4016
            err = socket_error();
4017
            if (err == EINTR || err == EWOULDBLOCK) {
4018
            } else if (err == EINPROGRESS) {
4019
                break;
4020
            } else {
4021
                perror("connect");
4022
                closesocket(fd);
4023
                return -1;
4024
            }
4025
        } else {
4026
            connected = 1;
4027
            break;
4028
        }
4029
    }
4030
    s = net_socket_fd_init(vlan, fd, connected);
4031
    if (!s)
4032
        return -1;
4033
    snprintf(s->vc->info_str, sizeof(s->vc->info_str),
4034
             "socket: connect to %s:%d", 
4035
             inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
4036
    return 0;
4037
}
4038

    
4039
static int net_socket_mcast_init(VLANState *vlan, const char *host_str)
4040
{
4041
    NetSocketState *s;
4042
    int fd;
4043
    struct sockaddr_in saddr;
4044

    
4045
    if (parse_host_port(&saddr, host_str) < 0)
4046
        return -1;
4047

    
4048

    
4049
    fd = net_socket_mcast_create(&saddr);
4050
    if (fd < 0)
4051
        return -1;
4052

    
4053
    s = net_socket_fd_init(vlan, fd, 0);
4054
    if (!s)
4055
        return -1;
4056

    
4057
    s->dgram_dst = saddr;
4058
    
4059
    snprintf(s->vc->info_str, sizeof(s->vc->info_str),
4060
             "socket: mcast=%s:%d", 
4061
             inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
4062
    return 0;
4063

    
4064
}
4065

    
4066
static int get_param_value(char *buf, int buf_size,
4067
                           const char *tag, const char *str)
4068
{
4069
    const char *p;
4070
    char *q;
4071
    char option[128];
4072

    
4073
    p = str;
4074
    for(;;) {
4075
        q = option;
4076
        while (*p != '\0' && *p != '=') {
4077
            if ((q - option) < sizeof(option) - 1)
4078
                *q++ = *p;
4079
            p++;
4080
        }
4081
        *q = '\0';
4082
        if (*p != '=')
4083
            break;
4084
        p++;
4085
        if (!strcmp(tag, option)) {
4086
            q = buf;
4087
            while (*p != '\0' && *p != ',') {
4088
                if ((q - buf) < buf_size - 1)
4089
                    *q++ = *p;
4090
                p++;
4091
            }
4092
            *q = '\0';
4093
            return q - buf;
4094
        } else {
4095
            while (*p != '\0' && *p != ',') {
4096
                p++;
4097
            }
4098
        }
4099
        if (*p != ',')
4100
            break;
4101
        p++;
4102
    }
4103
    return 0;
4104
}
4105

    
4106
static int net_client_init(const char *str)
4107
{
4108
    const char *p;
4109
    char *q;
4110
    char device[64];
4111
    char buf[1024];
4112
    int vlan_id, ret;
4113
    VLANState *vlan;
4114

    
4115
    p = str;
4116
    q = device;
4117
    while (*p != '\0' && *p != ',') {
4118
        if ((q - device) < sizeof(device) - 1)
4119
            *q++ = *p;
4120
        p++;
4121
    }
4122
    *q = '\0';
4123
    if (*p == ',')
4124
        p++;
4125
    vlan_id = 0;
4126
    if (get_param_value(buf, sizeof(buf), "vlan", p)) {
4127
        vlan_id = strtol(buf, NULL, 0);
4128
    }
4129
    vlan = qemu_find_vlan(vlan_id);
4130
    if (!vlan) {
4131
        fprintf(stderr, "Could not create vlan %d\n", vlan_id);
4132
        return -1;
4133
    }
4134
    if (!strcmp(device, "nic")) {
4135
        NICInfo *nd;
4136
        uint8_t *macaddr;
4137

    
4138
        if (nb_nics >= MAX_NICS) {
4139
            fprintf(stderr, "Too Many NICs\n");
4140
            return -1;
4141
        }
4142
        nd = &nd_table[nb_nics];
4143
        macaddr = nd->macaddr;
4144
        macaddr[0] = 0x52;
4145
        macaddr[1] = 0x54;
4146
        macaddr[2] = 0x00;
4147
        macaddr[3] = 0x12;
4148
        macaddr[4] = 0x34;
4149
        macaddr[5] = 0x56 + nb_nics;
4150

    
4151
        if (get_param_value(buf, sizeof(buf), "macaddr", p)) {
4152
            if (parse_macaddr(macaddr, buf) < 0) {
4153
                fprintf(stderr, "invalid syntax for ethernet address\n");
4154
                return -1;
4155
            }
4156
        }
4157
        if (get_param_value(buf, sizeof(buf), "model", p)) {
4158
            nd->model = strdup(buf);
4159
        }
4160
        nd->vlan = vlan;
4161
        nb_nics++;
4162
        ret = 0;
4163
    } else
4164
    if (!strcmp(device, "none")) {
4165
        /* does nothing. It is needed to signal that no network cards
4166
           are wanted */
4167
        ret = 0;
4168
    } else
4169
#ifdef CONFIG_SLIRP
4170
    if (!strcmp(device, "user")) {
4171
        if (get_param_value(buf, sizeof(buf), "hostname", p)) {
4172
            pstrcpy(slirp_hostname, sizeof(slirp_hostname), buf);
4173
        }
4174
        ret = net_slirp_init(vlan);
4175
    } else
4176
#endif
4177
#ifdef _WIN32
4178
    if (!strcmp(device, "tap")) {
4179
        char ifname[64];
4180
        if (get_param_value(ifname, sizeof(ifname), "ifname", p) <= 0) {
4181
            fprintf(stderr, "tap: no interface name\n");
4182
            return -1;
4183
        }
4184
        ret = tap_win32_init(vlan, ifname);
4185
    } else
4186
#else
4187
    if (!strcmp(device, "tap")) {
4188
        char ifname[64];
4189
        char setup_script[1024];
4190
        int fd;
4191
        if (get_param_value(buf, sizeof(buf), "fd", p) > 0) {
4192
            fd = strtol(buf, NULL, 0);
4193
            ret = -1;
4194
            if (net_tap_fd_init(vlan, fd))
4195
                ret = 0;
4196
        } else {
4197
            if (get_param_value(ifname, sizeof(ifname), "ifname", p) <= 0) {
4198
                ifname[0] = '\0';
4199
            }
4200
            if (get_param_value(setup_script, sizeof(setup_script), "script", p) == 0) {
4201
                pstrcpy(setup_script, sizeof(setup_script), DEFAULT_NETWORK_SCRIPT);
4202
            }
4203
            ret = net_tap_init(vlan, ifname, setup_script);
4204
        }
4205
    } else
4206
#endif
4207
    if (!strcmp(device, "socket")) {
4208
        if (get_param_value(buf, sizeof(buf), "fd", p) > 0) {
4209
            int fd;
4210
            fd = strtol(buf, NULL, 0);
4211
            ret = -1;
4212
            if (net_socket_fd_init(vlan, fd, 1))
4213
                ret = 0;
4214
        } else if (get_param_value(buf, sizeof(buf), "listen", p) > 0) {
4215
            ret = net_socket_listen_init(vlan, buf);
4216
        } else if (get_param_value(buf, sizeof(buf), "connect", p) > 0) {
4217
            ret = net_socket_connect_init(vlan, buf);
4218
        } else if (get_param_value(buf, sizeof(buf), "mcast", p) > 0) {
4219
            ret = net_socket_mcast_init(vlan, buf);
4220
        } else {
4221
            fprintf(stderr, "Unknown socket options: %s\n", p);
4222
            return -1;
4223
        }
4224
    } else
4225
    {
4226
        fprintf(stderr, "Unknown network device: %s\n", device);
4227
        return -1;
4228
    }
4229
    if (ret < 0) {
4230
        fprintf(stderr, "Could not initialize device '%s'\n", device);
4231
    }
4232
    
4233
    return ret;
4234
}
4235

    
4236
void do_info_network(void)
4237
{
4238
    VLANState *vlan;
4239
    VLANClientState *vc;
4240

    
4241
    for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) {
4242
        term_printf("VLAN %d devices:\n", vlan->id);
4243
        for(vc = vlan->first_client; vc != NULL; vc = vc->next)
4244
            term_printf("  %s\n", vc->info_str);
4245
    }
4246
}
4247

    
4248
/***********************************************************/
4249
/* USB devices */
4250

    
4251
static USBPort *used_usb_ports;
4252
static USBPort *free_usb_ports;
4253

    
4254
/* ??? Maybe change this to register a hub to keep track of the topology.  */
4255
void qemu_register_usb_port(USBPort *port, void *opaque, int index,
4256
                            usb_attachfn attach)
4257
{
4258
    port->opaque = opaque;
4259
    port->index = index;
4260
    port->attach = attach;
4261
    port->next = free_usb_ports;
4262
    free_usb_ports = port;
4263
}
4264

    
4265
static int usb_device_add(const char *devname)
4266
{
4267
    const char *p;
4268
    USBDevice *dev;
4269
    USBPort *port;
4270

    
4271
    if (!free_usb_ports)
4272
        return -1;
4273

    
4274
    if (strstart(devname, "host:", &p)) {
4275
        dev = usb_host_device_open(p);
4276
    } else if (!strcmp(devname, "mouse")) {
4277
        dev = usb_mouse_init();
4278
    } else if (!strcmp(devname, "tablet")) {
4279
        dev = usb_tablet_init();
4280
    } else if (strstart(devname, "disk:", &p)) {
4281
        dev = usb_msd_init(p);
4282
    } else {
4283
        return -1;
4284
    }
4285
    if (!dev)
4286
        return -1;
4287

    
4288
    /* Find a USB port to add the device to.  */
4289
    port = free_usb_ports;
4290
    if (!port->next) {
4291
        USBDevice *hub;
4292

    
4293
        /* Create a new hub and chain it on.  */
4294
        free_usb_ports = NULL;
4295
        port->next = used_usb_ports;
4296
        used_usb_ports = port;
4297

    
4298
        hub = usb_hub_init(VM_USB_HUB_SIZE);
4299
        usb_attach(port, hub);
4300
        port = free_usb_ports;
4301
    }
4302

    
4303
    free_usb_ports = port->next;
4304
    port->next = used_usb_ports;
4305
    used_usb_ports = port;
4306
    usb_attach(port, dev);
4307
    return 0;
4308
}
4309

    
4310
static int usb_device_del(const char *devname)
4311
{
4312
    USBPort *port;
4313
    USBPort **lastp;
4314
    USBDevice *dev;
4315
    int bus_num, addr;
4316
    const char *p;
4317

    
4318
    if (!used_usb_ports)
4319
        return -1;
4320

    
4321
    p = strchr(devname, '.');
4322
    if (!p) 
4323
        return -1;
4324
    bus_num = strtoul(devname, NULL, 0);
4325
    addr = strtoul(p + 1, NULL, 0);
4326
    if (bus_num != 0)
4327
        return -1;
4328

    
4329
    lastp = &used_usb_ports;
4330
    port = used_usb_ports;
4331
    while (port && port->dev->addr != addr) {
4332
        lastp = &port->next;
4333
        port = port->next;
4334
    }
4335

    
4336
    if (!port)
4337
        return -1;
4338

    
4339
    dev = port->dev;
4340
    *lastp = port->next;
4341
    usb_attach(port, NULL);
4342
    dev->handle_destroy(dev);
4343
    port->next = free_usb_ports;
4344
    free_usb_ports = port;
4345
    return 0;
4346
}
4347

    
4348
void do_usb_add(const char *devname)
4349
{
4350
    int ret;
4351
    ret = usb_device_add(devname);
4352
    if (ret < 0) 
4353
        term_printf("Could not add USB device '%s'\n", devname);
4354
}
4355

    
4356
void do_usb_del(const char *devname)
4357
{
4358
    int ret;
4359
    ret = usb_device_del(devname);
4360
    if (ret < 0) 
4361
        term_printf("Could not remove USB device '%s'\n", devname);
4362
}
4363

    
4364
void usb_info(void)
4365
{
4366
    USBDevice *dev;
4367
    USBPort *port;
4368
    const char *speed_str;
4369

    
4370
    if (!usb_enabled) {
4371
        term_printf("USB support not enabled\n");
4372
        return;
4373
    }
4374

    
4375
    for (port = used_usb_ports; port; port = port->next) {
4376
        dev = port->dev;
4377
        if (!dev)
4378
            continue;
4379
        switch(dev->speed) {
4380
        case USB_SPEED_LOW: 
4381
            speed_str = "1.5"; 
4382
            break;
4383
        case USB_SPEED_FULL: 
4384
            speed_str = "12"; 
4385
            break;
4386
        case USB_SPEED_HIGH: 
4387
            speed_str = "480"; 
4388
            break;
4389
        default:
4390
            speed_str = "?"; 
4391
            break;
4392
        }
4393
        term_printf("  Device %d.%d, Speed %s Mb/s, Product %s\n", 
4394
                    0, dev->addr, speed_str, dev->devname);
4395
    }
4396
}
4397

    
4398
static int create_pidfile(const char *filename)
4399
{
4400
    int fd;
4401
    char buffer[128];
4402
    int len;
4403

    
4404
    fd = open(filename, O_RDWR | O_CREAT, 0600);
4405
    if (fd == -1)
4406
        return -1;
4407

    
4408
    if (lockf(fd, F_TLOCK, 0) == -1)
4409
        return -1;
4410

    
4411
    len = snprintf(buffer, sizeof(buffer), "%ld\n", (long)getpid());
4412
    if (write(fd, buffer, len) != len)
4413
        return -1;
4414

    
4415
    return 0;
4416
}
4417

    
4418
/***********************************************************/
4419
/* dumb display */
4420

    
4421
static void dumb_update(DisplayState *ds, int x, int y, int w, int h)
4422
{
4423
}
4424

    
4425
static void dumb_resize(DisplayState *ds, int w, int h)
4426
{
4427
}
4428

    
4429
static void dumb_refresh(DisplayState *ds)
4430
{
4431
    vga_hw_update();
4432
}
4433

    
4434
void dumb_display_init(DisplayState *ds)
4435
{
4436
    ds->data = NULL;
4437
    ds->linesize = 0;
4438
    ds->depth = 0;
4439
    ds->dpy_update = dumb_update;
4440
    ds->dpy_resize = dumb_resize;
4441
    ds->dpy_refresh = dumb_refresh;
4442
}
4443

    
4444
/***********************************************************/
4445
/* I/O handling */
4446

    
4447
#define MAX_IO_HANDLERS 64
4448

    
4449
typedef struct IOHandlerRecord {
4450
    int fd;
4451
    IOCanRWHandler *fd_read_poll;
4452
    IOHandler *fd_read;
4453
    IOHandler *fd_write;
4454
    int deleted;
4455
    void *opaque;
4456
    /* temporary data */
4457
    struct pollfd *ufd;
4458
    struct IOHandlerRecord *next;
4459
} IOHandlerRecord;
4460

    
4461
static IOHandlerRecord *first_io_handler;
4462

    
4463
/* XXX: fd_read_poll should be suppressed, but an API change is
4464
   necessary in the character devices to suppress fd_can_read(). */
4465
int qemu_set_fd_handler2(int fd, 
4466
                         IOCanRWHandler *fd_read_poll, 
4467
                         IOHandler *fd_read, 
4468
                         IOHandler *fd_write, 
4469
                         void *opaque)
4470
{
4471
    IOHandlerRecord **pioh, *ioh;
4472

    
4473
    if (!fd_read && !fd_write) {
4474
        pioh = &first_io_handler;
4475
        for(;;) {
4476
            ioh = *pioh;
4477
            if (ioh == NULL)
4478
                break;
4479
            if (ioh->fd == fd) {
4480
                ioh->deleted = 1;
4481
                break;
4482
            }
4483
            pioh = &ioh->next;
4484
        }
4485
    } else {
4486
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
4487
            if (ioh->fd == fd)
4488
                goto found;
4489
        }
4490
        ioh = qemu_mallocz(sizeof(IOHandlerRecord));
4491
        if (!ioh)
4492
            return -1;
4493
        ioh->next = first_io_handler;
4494
        first_io_handler = ioh;
4495
    found:
4496
        ioh->fd = fd;
4497
        ioh->fd_read_poll = fd_read_poll;
4498
        ioh->fd_read = fd_read;
4499
        ioh->fd_write = fd_write;
4500
        ioh->opaque = opaque;
4501
        ioh->deleted = 0;
4502
    }
4503
    return 0;
4504
}
4505

    
4506
int qemu_set_fd_handler(int fd, 
4507
                        IOHandler *fd_read, 
4508
                        IOHandler *fd_write, 
4509
                        void *opaque)
4510
{
4511
    return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
4512
}
4513

    
4514
/***********************************************************/
4515
/* Polling handling */
4516

    
4517
typedef struct PollingEntry {
4518
    PollingFunc *func;
4519
    void *opaque;
4520
    struct PollingEntry *next;
4521
} PollingEntry;
4522

    
4523
static PollingEntry *first_polling_entry;
4524

    
4525
int qemu_add_polling_cb(PollingFunc *func, void *opaque)
4526
{
4527
    PollingEntry **ppe, *pe;
4528
    pe = qemu_mallocz(sizeof(PollingEntry));
4529
    if (!pe)
4530
        return -1;
4531
    pe->func = func;
4532
    pe->opaque = opaque;
4533
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next);
4534
    *ppe = pe;
4535
    return 0;
4536
}
4537

    
4538
void qemu_del_polling_cb(PollingFunc *func, void *opaque)
4539
{
4540
    PollingEntry **ppe, *pe;
4541
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next) {
4542
        pe = *ppe;
4543
        if (pe->func == func && pe->opaque == opaque) {
4544
            *ppe = pe->next;
4545
            qemu_free(pe);
4546
            break;
4547
        }
4548
    }
4549
}
4550

    
4551
#ifdef _WIN32
4552
/***********************************************************/
4553
/* Wait objects support */
4554
typedef struct WaitObjects {
4555
    int num;
4556
    HANDLE events[MAXIMUM_WAIT_OBJECTS + 1];
4557
    WaitObjectFunc *func[MAXIMUM_WAIT_OBJECTS + 1];
4558
    void *opaque[MAXIMUM_WAIT_OBJECTS + 1];
4559
} WaitObjects;
4560

    
4561
static WaitObjects wait_objects = {0};
4562
    
4563
int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
4564
{
4565
    WaitObjects *w = &wait_objects;
4566

    
4567
    if (w->num >= MAXIMUM_WAIT_OBJECTS)
4568
        return -1;
4569
    w->events[w->num] = handle;
4570
    w->func[w->num] = func;
4571
    w->opaque[w->num] = opaque;
4572
    w->num++;
4573
    return 0;
4574
}
4575

    
4576
void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
4577
{
4578
    int i, found;
4579
    WaitObjects *w = &wait_objects;
4580

    
4581
    found = 0;
4582
    for (i = 0; i < w->num; i++) {
4583
        if (w->events[i] == handle)
4584
            found = 1;
4585
        if (found) {
4586
            w->events[i] = w->events[i + 1];
4587
            w->func[i] = w->func[i + 1];
4588
            w->opaque[i] = w->opaque[i + 1];
4589
        }            
4590
    }
4591
    if (found)
4592
        w->num--;
4593
}
4594
#endif
4595

    
4596
/***********************************************************/
4597
/* savevm/loadvm support */
4598

    
4599
#define IO_BUF_SIZE 32768
4600

    
4601
struct QEMUFile {
4602
    FILE *outfile;
4603
    BlockDriverState *bs;
4604
    int is_file;
4605
    int is_writable;
4606
    int64_t base_offset;
4607
    int64_t buf_offset; /* start of buffer when writing, end of buffer
4608
                           when reading */
4609
    int buf_index;
4610
    int buf_size; /* 0 when writing */
4611
    uint8_t buf[IO_BUF_SIZE];
4612
};
4613

    
4614
QEMUFile *qemu_fopen(const char *filename, const char *mode)
4615
{
4616
    QEMUFile *f;
4617

    
4618
    f = qemu_mallocz(sizeof(QEMUFile));
4619
    if (!f)
4620
        return NULL;
4621
    if (!strcmp(mode, "wb")) {
4622
        f->is_writable = 1;
4623
    } else if (!strcmp(mode, "rb")) {
4624
        f->is_writable = 0;
4625
    } else {
4626
        goto fail;
4627
    }
4628
    f->outfile = fopen(filename, mode);
4629
    if (!f->outfile)
4630
        goto fail;
4631
    f->is_file = 1;
4632
    return f;
4633
 fail:
4634
    if (f->outfile)
4635
        fclose(f->outfile);
4636
    qemu_free(f);
4637
    return NULL;
4638
}
4639

    
4640
QEMUFile *qemu_fopen_bdrv(BlockDriverState *bs, int64_t offset, int is_writable)
4641
{
4642
    QEMUFile *f;
4643

    
4644
    f = qemu_mallocz(sizeof(QEMUFile));
4645
    if (!f)
4646
        return NULL;
4647
    f->is_file = 0;
4648
    f->bs = bs;
4649
    f->is_writable = is_writable;
4650
    f->base_offset = offset;
4651
    return f;
4652
}
4653

    
4654
void qemu_fflush(QEMUFile *f)
4655
{
4656
    if (!f->is_writable)
4657
        return;
4658
    if (f->buf_index > 0) {
4659
        if (f->is_file) {
4660
            fseek(f->outfile, f->buf_offset, SEEK_SET);
4661
            fwrite(f->buf, 1, f->buf_index, f->outfile);
4662
        } else {
4663
            bdrv_pwrite(f->bs, f->base_offset + f->buf_offset, 
4664
                        f->buf, f->buf_index);
4665
        }
4666
        f->buf_offset += f->buf_index;
4667
        f->buf_index = 0;
4668
    }
4669
}
4670

    
4671
static void qemu_fill_buffer(QEMUFile *f)
4672
{
4673
    int len;
4674

    
4675
    if (f->is_writable)
4676
        return;
4677
    if (f->is_file) {
4678
        fseek(f->outfile, f->buf_offset, SEEK_SET);
4679
        len = fread(f->buf, 1, IO_BUF_SIZE, f->outfile);
4680
        if (len < 0)
4681
            len = 0;
4682
    } else {
4683
        len = bdrv_pread(f->bs, f->base_offset + f->buf_offset, 
4684
                         f->buf, IO_BUF_SIZE);
4685
        if (len < 0)
4686
            len = 0;
4687
    }
4688
    f->buf_index = 0;
4689
    f->buf_size = len;
4690
    f->buf_offset += len;
4691
}
4692

    
4693
void qemu_fclose(QEMUFile *f)
4694
{
4695
    if (f->is_writable)
4696
        qemu_fflush(f);
4697
    if (f->is_file) {
4698
        fclose(f->outfile);
4699
    }
4700
    qemu_free(f);
4701
}
4702

    
4703
void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size)
4704
{
4705
    int l;
4706
    while (size > 0) {
4707
        l = IO_BUF_SIZE - f->buf_index;
4708
        if (l > size)
4709
            l = size;
4710
        memcpy(f->buf + f->buf_index, buf, l);
4711
        f->buf_index += l;
4712
        buf += l;
4713
        size -= l;
4714
        if (f->buf_index >= IO_BUF_SIZE)
4715
            qemu_fflush(f);
4716
    }
4717
}
4718

    
4719
void qemu_put_byte(QEMUFile *f, int v)
4720
{
4721
    f->buf[f->buf_index++] = v;
4722
    if (f->buf_index >= IO_BUF_SIZE)
4723
        qemu_fflush(f);
4724
}
4725

    
4726
int qemu_get_buffer(QEMUFile *f, uint8_t *buf, int size1)
4727
{
4728
    int size, l;
4729

    
4730
    size = size1;
4731
    while (size > 0) {
4732
        l = f->buf_size - f->buf_index;
4733
        if (l == 0) {
4734
            qemu_fill_buffer(f);
4735
            l = f->buf_size - f->buf_index;
4736
            if (l == 0)
4737
                break;
4738
        }
4739
        if (l > size)
4740
            l = size;
4741
        memcpy(buf, f->buf + f->buf_index, l);
4742
        f->buf_index += l;
4743
        buf += l;
4744
        size -= l;
4745
    }
4746
    return size1 - size;
4747
}
4748

    
4749
int qemu_get_byte(QEMUFile *f)
4750
{
4751
    if (f->buf_index >= f->buf_size) {
4752
        qemu_fill_buffer(f);
4753
        if (f->buf_index >= f->buf_size)
4754
            return 0;
4755
    }
4756
    return f->buf[f->buf_index++];
4757
}
4758

    
4759
int64_t qemu_ftell(QEMUFile *f)
4760
{
4761
    return f->buf_offset - f->buf_size + f->buf_index;
4762
}
4763

    
4764
int64_t qemu_fseek(QEMUFile *f, int64_t pos, int whence)
4765
{
4766
    if (whence == SEEK_SET) {
4767
        /* nothing to do */
4768
    } else if (whence == SEEK_CUR) {
4769
        pos += qemu_ftell(f);
4770
    } else {
4771
        /* SEEK_END not supported */
4772
        return -1;
4773
    }
4774
    if (f->is_writable) {
4775
        qemu_fflush(f);
4776
        f->buf_offset = pos;
4777
    } else {
4778
        f->buf_offset = pos;
4779
        f->buf_index = 0;
4780
        f->buf_size = 0;
4781
    }
4782
    return pos;
4783
}
4784

    
4785
void qemu_put_be16(QEMUFile *f, unsigned int v)
4786
{
4787
    qemu_put_byte(f, v >> 8);
4788
    qemu_put_byte(f, v);
4789
}
4790

    
4791
void qemu_put_be32(QEMUFile *f, unsigned int v)
4792
{
4793
    qemu_put_byte(f, v >> 24);
4794
    qemu_put_byte(f, v >> 16);
4795
    qemu_put_byte(f, v >> 8);
4796
    qemu_put_byte(f, v);
4797
}
4798

    
4799
void qemu_put_be64(QEMUFile *f, uint64_t v)
4800
{
4801
    qemu_put_be32(f, v >> 32);
4802
    qemu_put_be32(f, v);
4803
}
4804

    
4805
unsigned int qemu_get_be16(QEMUFile *f)
4806
{
4807
    unsigned int v;
4808
    v = qemu_get_byte(f) << 8;
4809
    v |= qemu_get_byte(f);
4810
    return v;
4811
}
4812

    
4813
unsigned int qemu_get_be32(QEMUFile *f)
4814
{
4815
    unsigned int v;
4816
    v = qemu_get_byte(f) << 24;
4817
    v |= qemu_get_byte(f) << 16;
4818
    v |= qemu_get_byte(f) << 8;
4819
    v |= qemu_get_byte(f);
4820
    return v;
4821
}
4822

    
4823
uint64_t qemu_get_be64(QEMUFile *f)
4824
{
4825
    uint64_t v;
4826
    v = (uint64_t)qemu_get_be32(f) << 32;
4827
    v |= qemu_get_be32(f);
4828
    return v;
4829
}
4830

    
4831
typedef struct SaveStateEntry {
4832
    char idstr[256];
4833
    int instance_id;
4834
    int version_id;
4835
    SaveStateHandler *save_state;
4836
    LoadStateHandler *load_state;
4837
    void *opaque;
4838
    struct SaveStateEntry *next;
4839
} SaveStateEntry;
4840

    
4841
static SaveStateEntry *first_se;
4842

    
4843
int register_savevm(const char *idstr, 
4844
                    int instance_id, 
4845
                    int version_id,
4846
                    SaveStateHandler *save_state,
4847
                    LoadStateHandler *load_state,
4848
                    void *opaque)
4849
{
4850
    SaveStateEntry *se, **pse;
4851

    
4852
    se = qemu_malloc(sizeof(SaveStateEntry));
4853
    if (!se)
4854
        return -1;
4855
    pstrcpy(se->idstr, sizeof(se->idstr), idstr);
4856
    se->instance_id = instance_id;
4857
    se->version_id = version_id;
4858
    se->save_state = save_state;
4859
    se->load_state = load_state;
4860
    se->opaque = opaque;
4861
    se->next = NULL;
4862

    
4863
    /* add at the end of list */
4864
    pse = &first_se;
4865
    while (*pse != NULL)
4866
        pse = &(*pse)->next;
4867
    *pse = se;
4868
    return 0;
4869
}
4870

    
4871
#define QEMU_VM_FILE_MAGIC   0x5145564d
4872
#define QEMU_VM_FILE_VERSION 0x00000002
4873

    
4874
int qemu_savevm_state(QEMUFile *f)
4875
{
4876
    SaveStateEntry *se;
4877
    int len, ret;
4878
    int64_t cur_pos, len_pos, total_len_pos;
4879

    
4880
    qemu_put_be32(f, QEMU_VM_FILE_MAGIC);
4881
    qemu_put_be32(f, QEMU_VM_FILE_VERSION);
4882
    total_len_pos = qemu_ftell(f);
4883
    qemu_put_be64(f, 0); /* total size */
4884

    
4885
    for(se = first_se; se != NULL; se = se->next) {
4886
        /* ID string */
4887
        len = strlen(se->idstr);
4888
        qemu_put_byte(f, len);
4889
        qemu_put_buffer(f, se->idstr, len);
4890

    
4891
        qemu_put_be32(f, se->instance_id);
4892
        qemu_put_be32(f, se->version_id);
4893

    
4894
        /* record size: filled later */
4895
        len_pos = qemu_ftell(f);
4896
        qemu_put_be32(f, 0);
4897
        
4898
        se->save_state(f, se->opaque);
4899

    
4900
        /* fill record size */
4901
        cur_pos = qemu_ftell(f);
4902
        len = cur_pos - len_pos - 4;
4903
        qemu_fseek(f, len_pos, SEEK_SET);
4904
        qemu_put_be32(f, len);
4905
        qemu_fseek(f, cur_pos, SEEK_SET);
4906
    }
4907
    cur_pos = qemu_ftell(f);
4908
    qemu_fseek(f, total_len_pos, SEEK_SET);
4909
    qemu_put_be64(f, cur_pos - total_len_pos - 8);
4910
    qemu_fseek(f, cur_pos, SEEK_SET);
4911

    
4912
    ret = 0;
4913
    return ret;
4914
}
4915

    
4916
static SaveStateEntry *find_se(const char *idstr, int instance_id)
4917
{
4918
    SaveStateEntry *se;
4919

    
4920
    for(se = first_se; se != NULL; se = se->next) {
4921
        if (!strcmp(se->idstr, idstr) && 
4922
            instance_id == se->instance_id)
4923
            return se;
4924
    }
4925
    return NULL;
4926
}
4927

    
4928
int qemu_loadvm_state(QEMUFile *f)
4929
{
4930
    SaveStateEntry *se;
4931
    int len, ret, instance_id, record_len, version_id;
4932
    int64_t total_len, end_pos, cur_pos;
4933
    unsigned int v;
4934
    char idstr[256];
4935
    
4936
    v = qemu_get_be32(f);
4937
    if (v != QEMU_VM_FILE_MAGIC)
4938
        goto fail;
4939
    v = qemu_get_be32(f);
4940
    if (v != QEMU_VM_FILE_VERSION) {
4941
    fail:
4942
        ret = -1;
4943
        goto the_end;
4944
    }
4945
    total_len = qemu_get_be64(f);
4946
    end_pos = total_len + qemu_ftell(f);
4947
    for(;;) {
4948
        if (qemu_ftell(f) >= end_pos)
4949
            break;
4950
        len = qemu_get_byte(f);
4951
        qemu_get_buffer(f, idstr, len);
4952
        idstr[len] = '\0';
4953
        instance_id = qemu_get_be32(f);
4954
        version_id = qemu_get_be32(f);
4955
        record_len = qemu_get_be32(f);
4956
#if 0
4957
        printf("idstr=%s instance=0x%x version=%d len=%d\n", 
4958
               idstr, instance_id, version_id, record_len);
4959
#endif
4960
        cur_pos = qemu_ftell(f);
4961
        se = find_se(idstr, instance_id);
4962
        if (!se) {
4963
            fprintf(stderr, "qemu: warning: instance 0x%x of device '%s' not present in current VM\n", 
4964
                    instance_id, idstr);
4965
        } else {
4966
            ret = se->load_state(f, se->opaque, version_id);
4967
            if (ret < 0) {
4968
                fprintf(stderr, "qemu: warning: error while loading state for instance 0x%x of device '%s'\n", 
4969
                        instance_id, idstr);
4970
            }
4971
        }
4972
        /* always seek to exact end of record */
4973
        qemu_fseek(f, cur_pos + record_len, SEEK_SET);
4974
    }
4975
    ret = 0;
4976
 the_end:
4977
    return ret;
4978
}
4979

    
4980
/* device can contain snapshots */
4981
static int bdrv_can_snapshot(BlockDriverState *bs)
4982
{
4983
    return (bs &&
4984
            !bdrv_is_removable(bs) &&
4985
            !bdrv_is_read_only(bs));
4986
}
4987

    
4988
/* device must be snapshots in order to have a reliable snapshot */
4989
static int bdrv_has_snapshot(BlockDriverState *bs)
4990
{
4991
    return (bs &&
4992
            !bdrv_is_removable(bs) &&
4993
            !bdrv_is_read_only(bs));
4994
}
4995

    
4996
static BlockDriverState *get_bs_snapshots(void)
4997
{
4998
    BlockDriverState *bs;
4999
    int i;
5000

    
5001
    if (bs_snapshots)
5002
        return bs_snapshots;
5003
    for(i = 0; i <= MAX_DISKS; i++) {
5004
        bs = bs_table[i];
5005
        if (bdrv_can_snapshot(bs))
5006
            goto ok;
5007
    }
5008
    return NULL;
5009
 ok:
5010
    bs_snapshots = bs;
5011
    return bs;
5012
}
5013

    
5014
static int bdrv_snapshot_find(BlockDriverState *bs, QEMUSnapshotInfo *sn_info,
5015
                              const char *name)
5016
{
5017
    QEMUSnapshotInfo *sn_tab, *sn;
5018
    int nb_sns, i, ret;
5019
    
5020
    ret = -ENOENT;
5021
    nb_sns = bdrv_snapshot_list(bs, &sn_tab);
5022
    if (nb_sns < 0)
5023
        return ret;
5024
    for(i = 0; i < nb_sns; i++) {
5025
        sn = &sn_tab[i];
5026
        if (!strcmp(sn->id_str, name) || !strcmp(sn->name, name)) {
5027
            *sn_info = *sn;
5028
            ret = 0;
5029
            break;
5030
        }
5031
    }
5032
    qemu_free(sn_tab);
5033
    return ret;
5034
}
5035

    
5036
void do_savevm(const char *name)
5037
{
5038
    BlockDriverState *bs, *bs1;
5039
    QEMUSnapshotInfo sn1, *sn = &sn1, old_sn1, *old_sn = &old_sn1;
5040
    int must_delete, ret, i;
5041
    BlockDriverInfo bdi1, *bdi = &bdi1;
5042
    QEMUFile *f;
5043
    int saved_vm_running;
5044
#ifdef _WIN32
5045
    struct _timeb tb;
5046
#else
5047
    struct timeval tv;
5048
#endif
5049

    
5050
    bs = get_bs_snapshots();
5051
    if (!bs) {
5052
        term_printf("No block device can accept snapshots\n");
5053
        return;
5054
    }
5055

    
5056
    /* ??? Should this occur after vm_stop?  */
5057
    qemu_aio_flush();
5058

    
5059
    saved_vm_running = vm_running;
5060
    vm_stop(0);
5061
    
5062
    must_delete = 0;
5063
    if (name) {
5064
        ret = bdrv_snapshot_find(bs, old_sn, name);
5065
        if (ret >= 0) {
5066
            must_delete = 1;
5067
        }
5068
    }
5069
    memset(sn, 0, sizeof(*sn));
5070
    if (must_delete) {
5071
        pstrcpy(sn->name, sizeof(sn->name), old_sn->name);
5072
        pstrcpy(sn->id_str, sizeof(sn->id_str), old_sn->id_str);
5073
    } else {
5074
        if (name)
5075
            pstrcpy(sn->name, sizeof(sn->name), name);
5076
    }
5077

    
5078
    /* fill auxiliary fields */
5079
#ifdef _WIN32
5080
    _ftime(&tb);
5081
    sn->date_sec = tb.time;
5082
    sn->date_nsec = tb.millitm * 1000000;
5083
#else
5084
    gettimeofday(&tv, NULL);
5085
    sn->date_sec = tv.tv_sec;
5086
    sn->date_nsec = tv.tv_usec * 1000;
5087
#endif
5088
    sn->vm_clock_nsec = qemu_get_clock(vm_clock);
5089
    
5090
    if (bdrv_get_info(bs, bdi) < 0 || bdi->vm_state_offset <= 0) {
5091
        term_printf("Device %s does not support VM state snapshots\n",
5092
                    bdrv_get_device_name(bs));
5093
        goto the_end;
5094
    }
5095
    
5096
    /* save the VM state */
5097
    f = qemu_fopen_bdrv(bs, bdi->vm_state_offset, 1);
5098
    if (!f) {
5099
        term_printf("Could not open VM state file\n");
5100
        goto the_end;
5101
    }
5102
    ret = qemu_savevm_state(f);
5103
    sn->vm_state_size = qemu_ftell(f);
5104
    qemu_fclose(f);
5105
    if (ret < 0) {
5106
        term_printf("Error %d while writing VM\n", ret);
5107
        goto the_end;
5108
    }
5109
    
5110
    /* create the snapshots */
5111

    
5112
    for(i = 0; i < MAX_DISKS; i++) {
5113
        bs1 = bs_table[i];
5114
        if (bdrv_has_snapshot(bs1)) {
5115
            if (must_delete) {
5116
                ret = bdrv_snapshot_delete(bs1, old_sn->id_str);
5117
                if (ret < 0) {
5118
                    term_printf("Error while deleting snapshot on '%s'\n",
5119
                                bdrv_get_device_name(bs1));
5120
                }
5121
            }
5122
            ret = bdrv_snapshot_create(bs1, sn);
5123
            if (ret < 0) {
5124
                term_printf("Error while creating snapshot on '%s'\n",
5125
                            bdrv_get_device_name(bs1));
5126
            }
5127
        }
5128
    }
5129

    
5130
 the_end:
5131
    if (saved_vm_running)
5132
        vm_start();
5133
}
5134

    
5135
void do_loadvm(const char *name)
5136
{
5137
    BlockDriverState *bs, *bs1;
5138
    BlockDriverInfo bdi1, *bdi = &bdi1;
5139
    QEMUFile *f;
5140
    int i, ret;
5141
    int saved_vm_running;
5142

    
5143
    bs = get_bs_snapshots();
5144
    if (!bs) {
5145
        term_printf("No block device supports snapshots\n");
5146
        return;
5147
    }
5148
    
5149
    /* Flush all IO requests so they don't interfere with the new state.  */
5150
    qemu_aio_flush();
5151

    
5152
    saved_vm_running = vm_running;
5153
    vm_stop(0);
5154

    
5155
    for(i = 0; i <= MAX_DISKS; i++) {
5156
        bs1 = bs_table[i];
5157
        if (bdrv_has_snapshot(bs1)) {
5158
            ret = bdrv_snapshot_goto(bs1, name);
5159
            if (ret < 0) {
5160
                if (bs != bs1)
5161
                    term_printf("Warning: ");
5162
                switch(ret) {
5163
                case -ENOTSUP:
5164
                    term_printf("Snapshots not supported on device '%s'\n",
5165
                                bdrv_get_device_name(bs1));
5166
                    break;
5167
                case -ENOENT:
5168
                    term_printf("Could not find snapshot '%s' on device '%s'\n",
5169
                                name, bdrv_get_device_name(bs1));
5170
                    break;
5171
                default:
5172
                    term_printf("Error %d while activating snapshot on '%s'\n",
5173
                                ret, bdrv_get_device_name(bs1));
5174
                    break;
5175
                }
5176
                /* fatal on snapshot block device */
5177
                if (bs == bs1)
5178
                    goto the_end;
5179
            }
5180
        }
5181
    }
5182

    
5183
    if (bdrv_get_info(bs, bdi) < 0 || bdi->vm_state_offset <= 0) {
5184
        term_printf("Device %s does not support VM state snapshots\n",
5185
                    bdrv_get_device_name(bs));
5186
        return;
5187
    }
5188
    
5189
    /* restore the VM state */
5190
    f = qemu_fopen_bdrv(bs, bdi->vm_state_offset, 0);
5191
    if (!f) {
5192
        term_printf("Could not open VM state file\n");
5193
        goto the_end;
5194
    }
5195
    ret = qemu_loadvm_state(f);
5196
    qemu_fclose(f);
5197
    if (ret < 0) {
5198
        term_printf("Error %d while loading VM state\n", ret);
5199
    }
5200
 the_end:
5201
    if (saved_vm_running)
5202
        vm_start();
5203
}
5204

    
5205
void do_delvm(const char *name)
5206
{
5207
    BlockDriverState *bs, *bs1;
5208
    int i, ret;
5209

    
5210
    bs = get_bs_snapshots();
5211
    if (!bs) {
5212
        term_printf("No block device supports snapshots\n");
5213
        return;
5214
    }
5215
    
5216
    for(i = 0; i <= MAX_DISKS; i++) {
5217
        bs1 = bs_table[i];
5218
        if (bdrv_has_snapshot(bs1)) {
5219
            ret = bdrv_snapshot_delete(bs1, name);
5220
            if (ret < 0) {
5221
                if (ret == -ENOTSUP)
5222
                    term_printf("Snapshots not supported on device '%s'\n",
5223
                                bdrv_get_device_name(bs1));
5224
                else
5225
                    term_printf("Error %d while deleting snapshot on '%s'\n",
5226
                                ret, bdrv_get_device_name(bs1));
5227
            }
5228
        }
5229
    }
5230
}
5231

    
5232
void do_info_snapshots(void)
5233
{
5234
    BlockDriverState *bs, *bs1;
5235
    QEMUSnapshotInfo *sn_tab, *sn;
5236
    int nb_sns, i;
5237
    char buf[256];
5238

    
5239
    bs = get_bs_snapshots();
5240
    if (!bs) {
5241
        term_printf("No available block device supports snapshots\n");
5242
        return;
5243
    }
5244
    term_printf("Snapshot devices:");
5245
    for(i = 0; i <= MAX_DISKS; i++) {
5246
        bs1 = bs_table[i];
5247
        if (bdrv_has_snapshot(bs1)) {
5248
            if (bs == bs1)
5249
                term_printf(" %s", bdrv_get_device_name(bs1));
5250
        }
5251
    }
5252
    term_printf("\n");
5253

    
5254
    nb_sns = bdrv_snapshot_list(bs, &sn_tab);
5255
    if (nb_sns < 0) {
5256
        term_printf("bdrv_snapshot_list: error %d\n", nb_sns);
5257
        return;
5258
    }
5259
    term_printf("Snapshot list (from %s):\n", bdrv_get_device_name(bs));
5260
    term_printf("%s\n", bdrv_snapshot_dump(buf, sizeof(buf), NULL));
5261
    for(i = 0; i < nb_sns; i++) {
5262
        sn = &sn_tab[i];
5263
        term_printf("%s\n", bdrv_snapshot_dump(buf, sizeof(buf), sn));
5264
    }
5265
    qemu_free(sn_tab);
5266
}
5267

    
5268
/***********************************************************/
5269
/* cpu save/restore */
5270

    
5271
#if defined(TARGET_I386)
5272

    
5273
static void cpu_put_seg(QEMUFile *f, SegmentCache *dt)
5274
{
5275
    qemu_put_be32(f, dt->selector);
5276
    qemu_put_betl(f, dt->base);
5277
    qemu_put_be32(f, dt->limit);
5278
    qemu_put_be32(f, dt->flags);
5279
}
5280

    
5281
static void cpu_get_seg(QEMUFile *f, SegmentCache *dt)
5282
{
5283
    dt->selector = qemu_get_be32(f);
5284
    dt->base = qemu_get_betl(f);
5285
    dt->limit = qemu_get_be32(f);
5286
    dt->flags = qemu_get_be32(f);
5287
}
5288

    
5289
void cpu_save(QEMUFile *f, void *opaque)
5290
{
5291
    CPUState *env = opaque;
5292
    uint16_t fptag, fpus, fpuc, fpregs_format;
5293
    uint32_t hflags;
5294
    int i;
5295
    
5296
    for(i = 0; i < CPU_NB_REGS; i++)
5297
        qemu_put_betls(f, &env->regs[i]);
5298
    qemu_put_betls(f, &env->eip);
5299
    qemu_put_betls(f, &env->eflags);
5300
    hflags = env->hflags; /* XXX: suppress most of the redundant hflags */
5301
    qemu_put_be32s(f, &hflags);
5302
    
5303
    /* FPU */
5304
    fpuc = env->fpuc;
5305
    fpus = (env->fpus & ~0x3800) | (env->fpstt & 0x7) << 11;
5306
    fptag = 0;
5307
    for(i = 0; i < 8; i++) {
5308
        fptag |= ((!env->fptags[i]) << i);
5309
    }
5310
    
5311
    qemu_put_be16s(f, &fpuc);
5312
    qemu_put_be16s(f, &fpus);
5313
    qemu_put_be16s(f, &fptag);
5314

    
5315
#ifdef USE_X86LDOUBLE
5316
    fpregs_format = 0;
5317
#else
5318
    fpregs_format = 1;
5319
#endif
5320
    qemu_put_be16s(f, &fpregs_format);
5321
    
5322
    for(i = 0; i < 8; i++) {
5323
#ifdef USE_X86LDOUBLE
5324
        {
5325
            uint64_t mant;
5326
            uint16_t exp;
5327
            /* we save the real CPU data (in case of MMX usage only 'mant'
5328
               contains the MMX register */
5329
            cpu_get_fp80(&mant, &exp, env->fpregs[i].d);
5330
            qemu_put_be64(f, mant);
5331
            qemu_put_be16(f, exp);
5332
        }
5333
#else
5334
        /* if we use doubles for float emulation, we save the doubles to
5335
           avoid losing information in case of MMX usage. It can give
5336
           problems if the image is restored on a CPU where long
5337
           doubles are used instead. */
5338
        qemu_put_be64(f, env->fpregs[i].mmx.MMX_Q(0));
5339
#endif
5340
    }
5341

    
5342
    for(i = 0; i < 6; i++)
5343
        cpu_put_seg(f, &env->segs[i]);
5344
    cpu_put_seg(f, &env->ldt);
5345
    cpu_put_seg(f, &env->tr);
5346
    cpu_put_seg(f, &env->gdt);
5347
    cpu_put_seg(f, &env->idt);
5348
    
5349
    qemu_put_be32s(f, &env->sysenter_cs);
5350
    qemu_put_be32s(f, &env->sysenter_esp);
5351
    qemu_put_be32s(f, &env->sysenter_eip);
5352
    
5353
    qemu_put_betls(f, &env->cr[0]);
5354
    qemu_put_betls(f, &env->cr[2]);
5355
    qemu_put_betls(f, &env->cr[3]);
5356
    qemu_put_betls(f, &env->cr[4]);
5357
    
5358
    for(i = 0; i < 8; i++)
5359
        qemu_put_betls(f, &env->dr[i]);
5360

    
5361
    /* MMU */
5362
    qemu_put_be32s(f, &env->a20_mask);
5363

    
5364
    /* XMM */
5365
    qemu_put_be32s(f, &env->mxcsr);
5366
    for(i = 0; i < CPU_NB_REGS; i++) {
5367
        qemu_put_be64s(f, &env->xmm_regs[i].XMM_Q(0));
5368
        qemu_put_be64s(f, &env->xmm_regs[i].XMM_Q(1));
5369
    }
5370

    
5371
#ifdef TARGET_X86_64
5372
    qemu_put_be64s(f, &env->efer);
5373
    qemu_put_be64s(f, &env->star);
5374
    qemu_put_be64s(f, &env->lstar);
5375
    qemu_put_be64s(f, &env->cstar);
5376
    qemu_put_be64s(f, &env->fmask);
5377
    qemu_put_be64s(f, &env->kernelgsbase);
5378
#endif
5379
    qemu_put_be32s(f, &env->smbase);
5380
}
5381

    
5382
#ifdef USE_X86LDOUBLE
5383
/* XXX: add that in a FPU generic layer */
5384
union x86_longdouble {
5385
    uint64_t mant;
5386
    uint16_t exp;
5387
};
5388

    
5389
#define MANTD1(fp)        (fp & ((1LL << 52) - 1))
5390
#define EXPBIAS1 1023
5391
#define EXPD1(fp)        ((fp >> 52) & 0x7FF)
5392
#define SIGND1(fp)        ((fp >> 32) & 0x80000000)
5393

    
5394
static void fp64_to_fp80(union x86_longdouble *p, uint64_t temp)
5395
{
5396
    int e;
5397
    /* mantissa */
5398
    p->mant = (MANTD1(temp) << 11) | (1LL << 63);
5399
    /* exponent + sign */
5400
    e = EXPD1(temp) - EXPBIAS1 + 16383;
5401
    e |= SIGND1(temp) >> 16;
5402
    p->exp = e;
5403
}
5404
#endif
5405

    
5406
int cpu_load(QEMUFile *f, void *opaque, int version_id)
5407
{
5408
    CPUState *env = opaque;
5409
    int i, guess_mmx;
5410
    uint32_t hflags;
5411
    uint16_t fpus, fpuc, fptag, fpregs_format;
5412

    
5413
    if (version_id != 3 && version_id != 4)
5414
        return -EINVAL;
5415
    for(i = 0; i < CPU_NB_REGS; i++)
5416
        qemu_get_betls(f, &env->regs[i]);
5417
    qemu_get_betls(f, &env->eip);
5418
    qemu_get_betls(f, &env->eflags);
5419
    qemu_get_be32s(f, &hflags);
5420

    
5421
    qemu_get_be16s(f, &fpuc);
5422
    qemu_get_be16s(f, &fpus);
5423
    qemu_get_be16s(f, &fptag);
5424
    qemu_get_be16s(f, &fpregs_format);
5425
    
5426
    /* NOTE: we cannot always restore the FPU state if the image come
5427
       from a host with a different 'USE_X86LDOUBLE' define. We guess
5428
       if we are in an MMX state to restore correctly in that case. */
5429
    guess_mmx = ((fptag == 0xff) && (fpus & 0x3800) == 0);
5430
    for(i = 0; i < 8; i++) {
5431
        uint64_t mant;
5432
        uint16_t exp;
5433
        
5434
        switch(fpregs_format) {
5435
        case 0:
5436
            mant = qemu_get_be64(f);
5437
            exp = qemu_get_be16(f);
5438
#ifdef USE_X86LDOUBLE
5439
            env->fpregs[i].d = cpu_set_fp80(mant, exp);
5440
#else
5441
            /* difficult case */
5442
            if (guess_mmx)
5443
                env->fpregs[i].mmx.MMX_Q(0) = mant;
5444
            else
5445
                env->fpregs[i].d = cpu_set_fp80(mant, exp);
5446
#endif
5447
            break;
5448
        case 1:
5449
            mant = qemu_get_be64(f);
5450
#ifdef USE_X86LDOUBLE
5451
            {
5452
                union x86_longdouble *p;
5453
                /* difficult case */
5454
                p = (void *)&env->fpregs[i];
5455
                if (guess_mmx) {
5456
                    p->mant = mant;
5457
                    p->exp = 0xffff;
5458
                } else {
5459
                    fp64_to_fp80(p, mant);
5460
                }
5461
            }
5462
#else
5463
            env->fpregs[i].mmx.MMX_Q(0) = mant;
5464
#endif            
5465
            break;
5466
        default:
5467
            return -EINVAL;
5468
        }
5469
    }
5470

    
5471
    env->fpuc = fpuc;
5472
    /* XXX: restore FPU round state */
5473
    env->fpstt = (fpus >> 11) & 7;
5474
    env->fpus = fpus & ~0x3800;
5475
    fptag ^= 0xff;
5476
    for(i = 0; i < 8; i++) {
5477
        env->fptags[i] = (fptag >> i) & 1;
5478
    }
5479
    
5480
    for(i = 0; i < 6; i++)
5481
        cpu_get_seg(f, &env->segs[i]);
5482
    cpu_get_seg(f, &env->ldt);
5483
    cpu_get_seg(f, &env->tr);
5484
    cpu_get_seg(f, &env->gdt);
5485
    cpu_get_seg(f, &env->idt);
5486
    
5487
    qemu_get_be32s(f, &env->sysenter_cs);
5488
    qemu_get_be32s(f, &env->sysenter_esp);
5489
    qemu_get_be32s(f, &env->sysenter_eip);
5490
    
5491
    qemu_get_betls(f, &env->cr[0]);
5492
    qemu_get_betls(f, &env->cr[2]);
5493
    qemu_get_betls(f, &env->cr[3]);
5494
    qemu_get_betls(f, &env->cr[4]);
5495
    
5496
    for(i = 0; i < 8; i++)
5497
        qemu_get_betls(f, &env->dr[i]);
5498

    
5499
    /* MMU */
5500
    qemu_get_be32s(f, &env->a20_mask);
5501

    
5502
    qemu_get_be32s(f, &env->mxcsr);
5503
    for(i = 0; i < CPU_NB_REGS; i++) {
5504
        qemu_get_be64s(f, &env->xmm_regs[i].XMM_Q(0));
5505
        qemu_get_be64s(f, &env->xmm_regs[i].XMM_Q(1));
5506
    }
5507

    
5508
#ifdef TARGET_X86_64
5509
    qemu_get_be64s(f, &env->efer);
5510
    qemu_get_be64s(f, &env->star);
5511
    qemu_get_be64s(f, &env->lstar);
5512
    qemu_get_be64s(f, &env->cstar);
5513
    qemu_get_be64s(f, &env->fmask);
5514
    qemu_get_be64s(f, &env->kernelgsbase);
5515
#endif
5516
    if (version_id >= 4) 
5517
        qemu_get_be32s(f, &env->smbase);
5518

    
5519
    /* XXX: compute hflags from scratch, except for CPL and IIF */
5520
    env->hflags = hflags;
5521
    tlb_flush(env, 1);
5522
    return 0;
5523
}
5524

    
5525
#elif defined(TARGET_PPC)
5526
void cpu_save(QEMUFile *f, void *opaque)
5527
{
5528
}
5529

    
5530
int cpu_load(QEMUFile *f, void *opaque, int version_id)
5531
{
5532
    return 0;
5533
}
5534

    
5535
#elif defined(TARGET_MIPS)
5536
void cpu_save(QEMUFile *f, void *opaque)
5537
{
5538
}
5539

    
5540
int cpu_load(QEMUFile *f, void *opaque, int version_id)
5541
{
5542
    return 0;
5543
}
5544

    
5545
#elif defined(TARGET_SPARC)
5546
void cpu_save(QEMUFile *f, void *opaque)
5547
{
5548
    CPUState *env = opaque;
5549
    int i;
5550
    uint32_t tmp;
5551

    
5552
    for(i = 0; i < 8; i++)
5553
        qemu_put_betls(f, &env->gregs[i]);
5554
    for(i = 0; i < NWINDOWS * 16; i++)
5555
        qemu_put_betls(f, &env->regbase[i]);
5556

    
5557
    /* FPU */
5558
    for(i = 0; i < TARGET_FPREGS; i++) {
5559
        union {
5560
            float32 f;
5561
            uint32_t i;
5562
        } u;
5563
        u.f = env->fpr[i];
5564
        qemu_put_be32(f, u.i);
5565
    }
5566

    
5567
    qemu_put_betls(f, &env->pc);
5568
    qemu_put_betls(f, &env->npc);
5569
    qemu_put_betls(f, &env->y);
5570
    tmp = GET_PSR(env);
5571
    qemu_put_be32(f, tmp);
5572
    qemu_put_betls(f, &env->fsr);
5573
    qemu_put_betls(f, &env->tbr);
5574
#ifndef TARGET_SPARC64
5575
    qemu_put_be32s(f, &env->wim);
5576
    /* MMU */
5577
    for(i = 0; i < 16; i++)
5578
        qemu_put_be32s(f, &env->mmuregs[i]);
5579
#endif
5580
}
5581

    
5582
int cpu_load(QEMUFile *f, void *opaque, int version_id)
5583
{
5584
    CPUState *env = opaque;
5585
    int i;
5586
    uint32_t tmp;
5587

    
5588
    for(i = 0; i < 8; i++)
5589
        qemu_get_betls(f, &env->gregs[i]);
5590
    for(i = 0; i < NWINDOWS * 16; i++)
5591
        qemu_get_betls(f, &env->regbase[i]);
5592

    
5593
    /* FPU */
5594
    for(i = 0; i < TARGET_FPREGS; i++) {
5595
        union {
5596
            float32 f;
5597
            uint32_t i;
5598
        } u;
5599
        u.i = qemu_get_be32(f);
5600
        env->fpr[i] = u.f;
5601
    }
5602

    
5603
    qemu_get_betls(f, &env->pc);
5604
    qemu_get_betls(f, &env->npc);
5605
    qemu_get_betls(f, &env->y);
5606
    tmp = qemu_get_be32(f);
5607
    env->cwp = 0; /* needed to ensure that the wrapping registers are
5608
                     correctly updated */
5609
    PUT_PSR(env, tmp);
5610
    qemu_get_betls(f, &env->fsr);
5611
    qemu_get_betls(f, &env->tbr);
5612
#ifndef TARGET_SPARC64
5613
    qemu_get_be32s(f, &env->wim);
5614
    /* MMU */
5615
    for(i = 0; i < 16; i++)
5616
        qemu_get_be32s(f, &env->mmuregs[i]);
5617
#endif
5618
    tlb_flush(env, 1);
5619
    return 0;
5620
}
5621

    
5622
#elif defined(TARGET_ARM)
5623

    
5624
/* ??? Need to implement these.  */
5625
void cpu_save(QEMUFile *f, void *opaque)
5626
{
5627
}
5628

    
5629
int cpu_load(QEMUFile *f, void *opaque, int version_id)
5630
{
5631
    return 0;
5632
}
5633

    
5634
#else
5635

    
5636
#warning No CPU save/restore functions
5637

    
5638
#endif
5639

    
5640
/***********************************************************/
5641
/* ram save/restore */
5642

    
5643
static int ram_get_page(QEMUFile *f, uint8_t *buf, int len)
5644
{
5645
    int v;
5646

    
5647
    v = qemu_get_byte(f);
5648
    switch(v) {
5649
    case 0:
5650
        if (qemu_get_buffer(f, buf, len) != len)
5651
            return -EIO;
5652
        break;
5653
    case 1:
5654
        v = qemu_get_byte(f);
5655
        memset(buf, v, len);
5656
        break;
5657
    default:
5658
        return -EINVAL;
5659
    }
5660
    return 0;
5661
}
5662

    
5663
static int ram_load_v1(QEMUFile *f, void *opaque)
5664
{
5665
    int i, ret;
5666

    
5667
    if (qemu_get_be32(f) != phys_ram_size)
5668
        return -EINVAL;
5669
    for(i = 0; i < phys_ram_size; i+= TARGET_PAGE_SIZE) {
5670
        ret = ram_get_page(f, phys_ram_base + i, TARGET_PAGE_SIZE);
5671
        if (ret)
5672
            return ret;
5673
    }
5674
    return 0;
5675
}
5676

    
5677
#define BDRV_HASH_BLOCK_SIZE 1024
5678
#define IOBUF_SIZE 4096
5679
#define RAM_CBLOCK_MAGIC 0xfabe
5680

    
5681
typedef struct RamCompressState {
5682
    z_stream zstream;
5683
    QEMUFile *f;
5684
    uint8_t buf[IOBUF_SIZE];
5685
} RamCompressState;
5686

    
5687
static int ram_compress_open(RamCompressState *s, QEMUFile *f)
5688
{
5689
    int ret;
5690
    memset(s, 0, sizeof(*s));
5691
    s->f = f;
5692
    ret = deflateInit2(&s->zstream, 1,
5693
                       Z_DEFLATED, 15, 
5694
                       9, Z_DEFAULT_STRATEGY);
5695
    if (ret != Z_OK)
5696
        return -1;
5697
    s->zstream.avail_out = IOBUF_SIZE;
5698
    s->zstream.next_out = s->buf;
5699
    return 0;
5700
}
5701

    
5702
static void ram_put_cblock(RamCompressState *s, const uint8_t *buf, int len)
5703
{
5704
    qemu_put_be16(s->f, RAM_CBLOCK_MAGIC);
5705
    qemu_put_be16(s->f, len);
5706
    qemu_put_buffer(s->f, buf, len);
5707
}
5708

    
5709
static int ram_compress_buf(RamCompressState *s, const uint8_t *buf, int len)
5710
{
5711
    int ret;
5712

    
5713
    s->zstream.avail_in = len;
5714
    s->zstream.next_in = (uint8_t *)buf;
5715
    while (s->zstream.avail_in > 0) {
5716
        ret = deflate(&s->zstream, Z_NO_FLUSH);
5717
        if (ret != Z_OK)
5718
            return -1;
5719
        if (s->zstream.avail_out == 0) {
5720
            ram_put_cblock(s, s->buf, IOBUF_SIZE);
5721
            s->zstream.avail_out = IOBUF_SIZE;
5722
            s->zstream.next_out = s->buf;
5723
        }
5724
    }
5725
    return 0;
5726
}
5727

    
5728
static void ram_compress_close(RamCompressState *s)
5729
{
5730
    int len, ret;
5731

    
5732
    /* compress last bytes */
5733
    for(;;) {
5734
        ret = deflate(&s->zstream, Z_FINISH);
5735
        if (ret == Z_OK || ret == Z_STREAM_END) {
5736
            len = IOBUF_SIZE - s->zstream.avail_out;
5737
            if (len > 0) {
5738
                ram_put_cblock(s, s->buf, len);
5739
            }
5740
            s->zstream.avail_out = IOBUF_SIZE;
5741
            s->zstream.next_out = s->buf;
5742
            if (ret == Z_STREAM_END)
5743
                break;
5744
        } else {
5745
            goto fail;
5746
        }
5747
    }
5748
fail:
5749
    deflateEnd(&s->zstream);
5750
}
5751

    
5752
typedef struct RamDecompressState {
5753
    z_stream zstream;
5754
    QEMUFile *f;
5755
    uint8_t buf[IOBUF_SIZE];
5756
} RamDecompressState;
5757

    
5758
static int ram_decompress_open(RamDecompressState *s, QEMUFile *f)
5759
{
5760
    int ret;
5761
    memset(s, 0, sizeof(*s));
5762
    s->f = f;
5763
    ret = inflateInit(&s->zstream);
5764
    if (ret != Z_OK)
5765
        return -1;
5766
    return 0;
5767
}
5768

    
5769
static int ram_decompress_buf(RamDecompressState *s, uint8_t *buf, int len)
5770
{
5771
    int ret, clen;
5772

    
5773
    s->zstream.avail_out = len;
5774
    s->zstream.next_out = buf;
5775
    while (s->zstream.avail_out > 0) {
5776
        if (s->zstream.avail_in == 0) {
5777
            if (qemu_get_be16(s->f) != RAM_CBLOCK_MAGIC)
5778
                return -1;
5779
            clen = qemu_get_be16(s->f);
5780
            if (clen > IOBUF_SIZE)
5781
                return -1;
5782
            qemu_get_buffer(s->f, s->buf, clen);
5783
            s->zstream.avail_in = clen;
5784
            s->zstream.next_in = s->buf;
5785
        }
5786
        ret = inflate(&s->zstream, Z_PARTIAL_FLUSH);
5787
        if (ret != Z_OK && ret != Z_STREAM_END) {
5788
            return -1;
5789
        }
5790
    }
5791
    return 0;
5792
}
5793

    
5794
static void ram_decompress_close(RamDecompressState *s)
5795
{
5796
    inflateEnd(&s->zstream);
5797
}
5798

    
5799
static void ram_save(QEMUFile *f, void *opaque)
5800
{
5801
    int i;
5802
    RamCompressState s1, *s = &s1;
5803
    uint8_t buf[10];
5804
    
5805
    qemu_put_be32(f, phys_ram_size);
5806
    if (ram_compress_open(s, f) < 0)
5807
        return;
5808
    for(i = 0; i < phys_ram_size; i+= BDRV_HASH_BLOCK_SIZE) {
5809
#if 0
5810
        if (tight_savevm_enabled) {
5811
            int64_t sector_num;
5812
            int j;
5813

5814
            /* find if the memory block is available on a virtual
5815
               block device */
5816
            sector_num = -1;
5817
            for(j = 0; j < MAX_DISKS; j++) {
5818
                if (bs_table[j]) {
5819
                    sector_num = bdrv_hash_find(bs_table[j], 
5820
                                                phys_ram_base + i, BDRV_HASH_BLOCK_SIZE);
5821
                    if (sector_num >= 0)
5822
                        break;
5823
                }
5824
            }
5825
            if (j == MAX_DISKS)
5826
                goto normal_compress;
5827
            buf[0] = 1;
5828
            buf[1] = j;
5829
            cpu_to_be64wu((uint64_t *)(buf + 2), sector_num);
5830
            ram_compress_buf(s, buf, 10);
5831
        } else 
5832
#endif
5833
        {
5834
            //        normal_compress:
5835
            buf[0] = 0;
5836
            ram_compress_buf(s, buf, 1);
5837
            ram_compress_buf(s, phys_ram_base + i, BDRV_HASH_BLOCK_SIZE);
5838
        }
5839
    }
5840
    ram_compress_close(s);
5841
}
5842

    
5843
static int ram_load(QEMUFile *f, void *opaque, int version_id)
5844
{
5845
    RamDecompressState s1, *s = &s1;
5846
    uint8_t buf[10];
5847
    int i;
5848

    
5849
    if (version_id == 1)
5850
        return ram_load_v1(f, opaque);
5851
    if (version_id != 2)
5852
        return -EINVAL;
5853
    if (qemu_get_be32(f) != phys_ram_size)
5854
        return -EINVAL;
5855
    if (ram_decompress_open(s, f) < 0)
5856
        return -EINVAL;
5857
    for(i = 0; i < phys_ram_size; i+= BDRV_HASH_BLOCK_SIZE) {
5858
        if (ram_decompress_buf(s, buf, 1) < 0) {
5859
            fprintf(stderr, "Error while reading ram block header\n");
5860
            goto error;
5861
        }
5862
        if (buf[0] == 0) {
5863
            if (ram_decompress_buf(s, phys_ram_base + i, BDRV_HASH_BLOCK_SIZE) < 0) {
5864
                fprintf(stderr, "Error while reading ram block address=0x%08x", i);
5865
                goto error;
5866
            }
5867
        } else 
5868
#if 0
5869
        if (buf[0] == 1) {
5870
            int bs_index;
5871
            int64_t sector_num;
5872

5873
            ram_decompress_buf(s, buf + 1, 9);
5874
            bs_index = buf[1];
5875
            sector_num = be64_to_cpupu((const uint64_t *)(buf + 2));
5876
            if (bs_index >= MAX_DISKS || bs_table[bs_index] == NULL) {
5877
                fprintf(stderr, "Invalid block device index %d\n", bs_index);
5878
                goto error;
5879
            }
5880
            if (bdrv_read(bs_table[bs_index], sector_num, phys_ram_base + i, 
5881
                          BDRV_HASH_BLOCK_SIZE / 512) < 0) {
5882
                fprintf(stderr, "Error while reading sector %d:%" PRId64 "\n", 
5883
                        bs_index, sector_num);
5884
                goto error;
5885
            }
5886
        } else 
5887
#endif
5888
        {
5889
        error:
5890
            printf("Error block header\n");
5891
            return -EINVAL;
5892
        }
5893
    }
5894
    ram_decompress_close(s);
5895
    return 0;
5896
}
5897

    
5898
/***********************************************************/
5899
/* bottom halves (can be seen as timers which expire ASAP) */
5900

    
5901
struct QEMUBH {
5902
    QEMUBHFunc *cb;
5903
    void *opaque;
5904
    int scheduled;
5905
    QEMUBH *next;
5906
};
5907

    
5908
static QEMUBH *first_bh = NULL;
5909

    
5910
QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque)
5911
{
5912
    QEMUBH *bh;
5913
    bh = qemu_mallocz(sizeof(QEMUBH));
5914
    if (!bh)
5915
        return NULL;
5916
    bh->cb = cb;
5917
    bh->opaque = opaque;
5918
    return bh;
5919
}
5920

    
5921
int qemu_bh_poll(void)
5922
{
5923
    QEMUBH *bh, **pbh;
5924
    int ret;
5925

    
5926
    ret = 0;
5927
    for(;;) {
5928
        pbh = &first_bh;
5929
        bh = *pbh;
5930
        if (!bh)
5931
            break;
5932
        ret = 1;
5933
        *pbh = bh->next;
5934
        bh->scheduled = 0;
5935
        bh->cb(bh->opaque);
5936
    }
5937
    return ret;
5938
}
5939

    
5940
void qemu_bh_schedule(QEMUBH *bh)
5941
{
5942
    CPUState *env = cpu_single_env;
5943
    if (bh->scheduled)
5944
        return;
5945
    bh->scheduled = 1;
5946
    bh->next = first_bh;
5947
    first_bh = bh;
5948

    
5949
    /* stop the currently executing CPU to execute the BH ASAP */
5950
    if (env) {
5951
        cpu_interrupt(env, CPU_INTERRUPT_EXIT);
5952
    }
5953
}
5954

    
5955
void qemu_bh_cancel(QEMUBH *bh)
5956
{
5957
    QEMUBH **pbh;
5958
    if (bh->scheduled) {
5959
        pbh = &first_bh;
5960
        while (*pbh != bh)
5961
            pbh = &(*pbh)->next;
5962
        *pbh = bh->next;
5963
        bh->scheduled = 0;
5964
    }
5965
}
5966

    
5967
void qemu_bh_delete(QEMUBH *bh)
5968
{
5969
    qemu_bh_cancel(bh);
5970
    qemu_free(bh);
5971
}
5972

    
5973
/***********************************************************/
5974
/* machine registration */
5975

    
5976
QEMUMachine *first_machine = NULL;
5977

    
5978
int qemu_register_machine(QEMUMachine *m)
5979
{
5980
    QEMUMachine **pm;
5981
    pm = &first_machine;
5982
    while (*pm != NULL)
5983
        pm = &(*pm)->next;
5984
    m->next = NULL;
5985
    *pm = m;
5986
    return 0;
5987
}
5988

    
5989
QEMUMachine *find_machine(const char *name)
5990
{
5991
    QEMUMachine *m;
5992

    
5993
    for(m = first_machine; m != NULL; m = m->next) {
5994
        if (!strcmp(m->name, name))
5995
            return m;
5996
    }
5997
    return NULL;
5998
}
5999

    
6000
/***********************************************************/
6001
/* main execution loop */
6002

    
6003
void gui_update(void *opaque)
6004
{
6005
    display_state.dpy_refresh(&display_state);
6006
    qemu_mod_timer(gui_timer, GUI_REFRESH_INTERVAL + qemu_get_clock(rt_clock));
6007
}
6008

    
6009
struct vm_change_state_entry {
6010
    VMChangeStateHandler *cb;
6011
    void *opaque;
6012
    LIST_ENTRY (vm_change_state_entry) entries;
6013
};
6014

    
6015
static LIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
6016

    
6017
VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
6018
                                                     void *opaque)
6019
{
6020
    VMChangeStateEntry *e;
6021

    
6022
    e = qemu_mallocz(sizeof (*e));
6023
    if (!e)
6024
        return NULL;
6025

    
6026
    e->cb = cb;
6027
    e->opaque = opaque;
6028
    LIST_INSERT_HEAD(&vm_change_state_head, e, entries);
6029
    return e;
6030
}
6031

    
6032
void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
6033
{
6034
    LIST_REMOVE (e, entries);
6035
    qemu_free (e);
6036
}
6037

    
6038
static void vm_state_notify(int running)
6039
{
6040
    VMChangeStateEntry *e;
6041

    
6042
    for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) {
6043
        e->cb(e->opaque, running);
6044
    }
6045
}
6046

    
6047
/* XXX: support several handlers */
6048
static VMStopHandler *vm_stop_cb;
6049
static void *vm_stop_opaque;
6050

    
6051
int qemu_add_vm_stop_handler(VMStopHandler *cb, void *opaque)
6052
{
6053
    vm_stop_cb = cb;
6054
    vm_stop_opaque = opaque;
6055
    return 0;
6056
}
6057

    
6058
void qemu_del_vm_stop_handler(VMStopHandler *cb, void *opaque)
6059
{
6060
    vm_stop_cb = NULL;
6061
}
6062

    
6063
void vm_start(void)
6064
{
6065
    if (!vm_running) {
6066
        cpu_enable_ticks();
6067
        vm_running = 1;
6068
        vm_state_notify(1);
6069
    }
6070
}
6071

    
6072
void vm_stop(int reason) 
6073
{
6074
    if (vm_running) {
6075
        cpu_disable_ticks();
6076
        vm_running = 0;
6077
        if (reason != 0) {
6078
            if (vm_stop_cb) {
6079
                vm_stop_cb(vm_stop_opaque, reason);
6080
            }
6081
        }
6082
        vm_state_notify(0);
6083
    }
6084
}
6085

    
6086
/* reset/shutdown handler */
6087

    
6088
typedef struct QEMUResetEntry {
6089
    QEMUResetHandler *func;
6090
    void *opaque;
6091
    struct QEMUResetEntry *next;
6092
} QEMUResetEntry;
6093

    
6094
static QEMUResetEntry *first_reset_entry;
6095
static int reset_requested;
6096
static int shutdown_requested;
6097
static int powerdown_requested;
6098

    
6099
void qemu_register_reset(QEMUResetHandler *func, void *opaque)
6100
{
6101
    QEMUResetEntry **pre, *re;
6102

    
6103
    pre = &first_reset_entry;
6104
    while (*pre != NULL)
6105
        pre = &(*pre)->next;
6106
    re = qemu_mallocz(sizeof(QEMUResetEntry));
6107
    re->func = func;
6108
    re->opaque = opaque;
6109
    re->next = NULL;
6110
    *pre = re;
6111
}
6112

    
6113
static void qemu_system_reset(void)
6114
{
6115
    QEMUResetEntry *re;
6116

    
6117
    /* reset all devices */
6118
    for(re = first_reset_entry; re != NULL; re = re->next) {
6119
        re->func(re->opaque);
6120
    }
6121
}
6122

    
6123
void qemu_system_reset_request(void)
6124
{
6125
    if (no_reboot) {
6126
        shutdown_requested = 1;
6127
    } else {
6128
        reset_requested = 1;
6129
    }
6130
    if (cpu_single_env)
6131
        cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
6132
}
6133

    
6134
void qemu_system_shutdown_request(void)
6135
{
6136
    shutdown_requested = 1;
6137
    if (cpu_single_env)
6138
        cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
6139
}
6140

    
6141
void qemu_system_powerdown_request(void)
6142
{
6143
    powerdown_requested = 1;
6144
    if (cpu_single_env)
6145
        cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
6146
}
6147

    
6148
void main_loop_wait(int timeout)
6149
{
6150
    IOHandlerRecord *ioh;
6151
    fd_set rfds, wfds, xfds;
6152
    int ret, nfds;
6153
    struct timeval tv;
6154
    PollingEntry *pe;
6155

    
6156

    
6157
    /* XXX: need to suppress polling by better using win32 events */
6158
    ret = 0;
6159
    for(pe = first_polling_entry; pe != NULL; pe = pe->next) {
6160
        ret |= pe->func(pe->opaque);
6161
    }
6162
#ifdef _WIN32
6163
    if (ret == 0 && timeout > 0) {
6164
        int err;
6165
        WaitObjects *w = &wait_objects;
6166
        
6167
        ret = WaitForMultipleObjects(w->num, w->events, FALSE, timeout);
6168
        if (WAIT_OBJECT_0 + 0 <= ret && ret <= WAIT_OBJECT_0 + w->num - 1) {
6169
            if (w->func[ret - WAIT_OBJECT_0])
6170
                w->func[ret - WAIT_OBJECT_0](w->opaque[ret - WAIT_OBJECT_0]);
6171
        } else if (ret == WAIT_TIMEOUT) {
6172
        } else {
6173
            err = GetLastError();
6174
            fprintf(stderr, "Wait error %d %d\n", ret, err);
6175
        }
6176
    }
6177
#endif
6178
    /* poll any events */
6179
    /* XXX: separate device handlers from system ones */
6180
    nfds = -1;
6181
    FD_ZERO(&rfds);
6182
    FD_ZERO(&wfds);
6183
    FD_ZERO(&xfds);
6184
    for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
6185
        if (ioh->deleted)
6186
            continue;
6187
        if (ioh->fd_read &&
6188
            (!ioh->fd_read_poll ||
6189
             ioh->fd_read_poll(ioh->opaque) != 0)) {
6190
            FD_SET(ioh->fd, &rfds);
6191
            if (ioh->fd > nfds)
6192
                nfds = ioh->fd;
6193
        }
6194
        if (ioh->fd_write) {
6195
            FD_SET(ioh->fd, &wfds);
6196
            if (ioh->fd > nfds)
6197
                nfds = ioh->fd;
6198
        }
6199
    }
6200
    
6201
    tv.tv_sec = 0;
6202
#ifdef _WIN32
6203
    tv.tv_usec = 0;
6204
#else
6205
    tv.tv_usec = timeout * 1000;
6206
#endif
6207
#if defined(CONFIG_SLIRP)
6208
    if (slirp_inited) {
6209
        slirp_select_fill(&nfds, &rfds, &wfds, &xfds);
6210
    }
6211
#endif
6212
    ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv);
6213
    if (ret > 0) {
6214
        IOHandlerRecord **pioh;
6215

    
6216
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
6217
            if (ioh->deleted)
6218
                continue;
6219
            if (FD_ISSET(ioh->fd, &rfds)) {
6220
                ioh->fd_read(ioh->opaque);
6221
            }
6222
            if (FD_ISSET(ioh->fd, &wfds)) {
6223
                ioh->fd_write(ioh->opaque);
6224
            }
6225
        }
6226

    
6227
        /* remove deleted IO handlers */
6228
        pioh = &first_io_handler;
6229
        while (*pioh) {
6230
            ioh = *pioh;
6231
            if (ioh->deleted) {
6232
                *pioh = ioh->next;
6233
                qemu_free(ioh);
6234
            } else 
6235
                pioh = &ioh->next;
6236
        }
6237
    }
6238
#if defined(CONFIG_SLIRP)
6239
    if (slirp_inited) {
6240
        if (ret < 0) {
6241
            FD_ZERO(&rfds);
6242
            FD_ZERO(&wfds);
6243
            FD_ZERO(&xfds);
6244
        }
6245
        slirp_select_poll(&rfds, &wfds, &xfds);
6246
    }
6247
#endif
6248
    qemu_aio_poll();
6249
    qemu_bh_poll();
6250

    
6251
    if (vm_running) {
6252
        qemu_run_timers(&active_timers[QEMU_TIMER_VIRTUAL], 
6253
                        qemu_get_clock(vm_clock));
6254
        /* run dma transfers, if any */
6255
        DMA_run();
6256
    }
6257
    
6258
    /* real time timers */
6259
    qemu_run_timers(&active_timers[QEMU_TIMER_REALTIME], 
6260
                    qemu_get_clock(rt_clock));
6261
}
6262

    
6263
static CPUState *cur_cpu;
6264

    
6265
int main_loop(void)
6266
{
6267
    int ret, timeout;
6268
#ifdef CONFIG_PROFILER
6269
    int64_t ti;
6270
#endif
6271
    CPUState *env;
6272

    
6273
    cur_cpu = first_cpu;
6274
    for(;;) {
6275
        if (vm_running) {
6276

    
6277
            env = cur_cpu;
6278
            for(;;) {
6279
                /* get next cpu */
6280
                env = env->next_cpu;
6281
                if (!env)
6282
                    env = first_cpu;
6283
#ifdef CONFIG_PROFILER
6284
                ti = profile_getclock();
6285
#endif
6286
                ret = cpu_exec(env);
6287
#ifdef CONFIG_PROFILER
6288
                qemu_time += profile_getclock() - ti;
6289
#endif
6290
                if (ret == EXCP_HLT) {
6291
                    /* Give the next CPU a chance to run.  */
6292
                    cur_cpu = env;
6293
                    continue;
6294
                }
6295
                if (ret != EXCP_HALTED)
6296
                    break;
6297
                /* all CPUs are halted ? */
6298
                if (env == cur_cpu)
6299
                    break;
6300
            }
6301
            cur_cpu = env;
6302

    
6303
            if (shutdown_requested) {
6304
                ret = EXCP_INTERRUPT;
6305
                break;
6306
            }
6307
            if (reset_requested) {
6308
                reset_requested = 0;
6309
                qemu_system_reset();
6310
                ret = EXCP_INTERRUPT;
6311
            }
6312
            if (powerdown_requested) {
6313
                powerdown_requested = 0;
6314
                qemu_system_powerdown();
6315
                ret = EXCP_INTERRUPT;
6316
            }
6317
            if (ret == EXCP_DEBUG) {
6318
                vm_stop(EXCP_DEBUG);
6319
            }
6320
            /* If all cpus are halted then wait until the next IRQ */
6321
            /* XXX: use timeout computed from timers */
6322
            if (ret == EXCP_HALTED)
6323
                timeout = 10;
6324
            else
6325
                timeout = 0;
6326
        } else {
6327
            timeout = 10;
6328
        }
6329
#ifdef CONFIG_PROFILER
6330
        ti = profile_getclock();
6331
#endif
6332
        main_loop_wait(timeout);
6333
#ifdef CONFIG_PROFILER
6334
        dev_time += profile_getclock() - ti;
6335
#endif
6336
    }
6337
    cpu_disable_ticks();
6338
    return ret;
6339
}
6340

    
6341
void help(void)
6342
{
6343
    printf("QEMU PC emulator version " QEMU_VERSION ", Copyright (c) 2003-2007 Fabrice Bellard\n"
6344
           "usage: %s [options] [disk_image]\n"
6345
           "\n"
6346
           "'disk_image' is a raw hard image image for IDE hard disk 0\n"
6347
           "\n"
6348
           "Standard options:\n"
6349
           "-M machine      select emulated machine (-M ? for list)\n"
6350
           "-cpu cpu        select CPU (-cpu ? for list)\n"
6351
           "-fda/-fdb file  use 'file' as floppy disk 0/1 image\n"
6352
           "-hda/-hdb file  use 'file' as IDE hard disk 0/1 image\n"
6353
           "-hdc/-hdd file  use 'file' as IDE hard disk 2/3 image\n"
6354
           "-cdrom file     use 'file' as IDE cdrom image (cdrom is ide1 master)\n"
6355
           "-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n)\n"
6356
           "-snapshot       write to temporary files instead of disk image files\n"
6357
#ifdef CONFIG_SDL
6358
           "-no-frame       open SDL window without a frame and window decorations\n"
6359
           "-no-quit        disable SDL window close capability\n"
6360
#endif
6361
#ifdef TARGET_I386
6362
           "-no-fd-bootchk  disable boot signature checking for floppy disks\n"
6363
#endif
6364
           "-m megs         set virtual RAM size to megs MB [default=%d]\n"
6365
           "-smp n          set the number of CPUs to 'n' [default=1]\n"
6366
           "-nographic      disable graphical output and redirect serial I/Os to console\n"
6367
#ifndef _WIN32
6368
           "-k language     use keyboard layout (for example \"fr\" for French)\n"
6369
#endif
6370
#ifdef HAS_AUDIO
6371
           "-audio-help     print list of audio drivers and their options\n"
6372
           "-soundhw c1,... enable audio support\n"
6373
           "                and only specified sound cards (comma separated list)\n"
6374
           "                use -soundhw ? to get the list of supported cards\n"
6375
           "                use -soundhw all to enable all of them\n"
6376
#endif
6377
           "-localtime      set the real time clock to local time [default=utc]\n"
6378
           "-full-screen    start in full screen\n"
6379
#ifdef TARGET_I386
6380
           "-win2k-hack     use it when installing Windows 2000 to avoid a disk full bug\n"
6381
#endif
6382
           "-usb            enable the USB driver (will be the default soon)\n"
6383
           "-usbdevice name add the host or guest USB device 'name'\n"
6384
#if defined(TARGET_PPC) || defined(TARGET_SPARC)
6385
           "-g WxH[xDEPTH]  Set the initial graphical resolution and depth\n"
6386
#endif
6387
           "-name string    set the name of the guest\n"
6388
           "\n"
6389
           "Network options:\n"
6390
           "-net nic[,vlan=n][,macaddr=addr][,model=type]\n"
6391
           "                create a new Network Interface Card and connect it to VLAN 'n'\n"
6392
#ifdef CONFIG_SLIRP
6393
           "-net user[,vlan=n][,hostname=host]\n"
6394
           "                connect the user mode network stack to VLAN 'n' and send\n"
6395
           "                hostname 'host' to DHCP clients\n"
6396
#endif
6397
#ifdef _WIN32
6398
           "-net tap[,vlan=n],ifname=name\n"
6399
           "                connect the host TAP network interface to VLAN 'n'\n"
6400
#else
6401
           "-net tap[,vlan=n][,fd=h][,ifname=name][,script=file]\n"
6402
           "                connect the host TAP network interface to VLAN 'n' and use\n"
6403
           "                the network script 'file' (default=%s);\n"
6404
           "                use 'script=no' to disable script execution;\n"
6405
           "                use 'fd=h' to connect to an already opened TAP interface\n"
6406
#endif
6407
           "-net socket[,vlan=n][,fd=h][,listen=[host]:port][,connect=host:port]\n"
6408
           "                connect the vlan 'n' to another VLAN using a socket connection\n"
6409
           "-net socket[,vlan=n][,fd=h][,mcast=maddr:port]\n"
6410
           "                connect the vlan 'n' to multicast maddr and port\n"
6411
           "-net none       use it alone to have zero network devices; if no -net option\n"
6412
           "                is provided, the default is '-net nic -net user'\n"
6413
           "\n"
6414
#ifdef CONFIG_SLIRP
6415
           "-tftp dir       allow tftp access to files in dir [-net user]\n"
6416
           "-bootp file     advertise file in BOOTP replies\n"
6417
#ifndef _WIN32
6418
           "-smb dir        allow SMB access to files in 'dir' [-net user]\n"
6419
#endif
6420
           "-redir [tcp|udp]:host-port:[guest-host]:guest-port\n"
6421
           "                redirect TCP or UDP connections from host to guest [-net user]\n"
6422
#endif
6423
           "\n"
6424
           "Linux boot specific:\n"
6425
           "-kernel bzImage use 'bzImage' as kernel image\n"
6426
           "-append cmdline use 'cmdline' as kernel command line\n"
6427
           "-initrd file    use 'file' as initial ram disk\n"
6428
           "\n"
6429
           "Debug/Expert options:\n"
6430
           "-monitor dev    redirect the monitor to char device 'dev'\n"
6431
           "-serial dev     redirect the serial port to char device 'dev'\n"
6432
           "-parallel dev   redirect the parallel port to char device 'dev'\n"
6433
           "-pidfile file   Write PID to 'file'\n"
6434
           "-S              freeze CPU at startup (use 'c' to start execution)\n"
6435
           "-s              wait gdb connection to port\n"
6436
           "-p port         set gdb connection port [default=%s]\n"
6437
           "-d item1,...    output log to %s (use -d ? for a list of log items)\n"
6438
           "-hdachs c,h,s[,t]  force hard disk 0 physical geometry and the optional BIOS\n"
6439
           "                translation (t=none or lba) (usually qemu can guess them)\n"
6440
           "-L path         set the directory for the BIOS, VGA BIOS and keymaps\n"
6441
#ifdef USE_KQEMU
6442
           "-kernel-kqemu   enable KQEMU full virtualization (default is user mode only)\n"
6443
           "-no-kqemu       disable KQEMU kernel module usage\n"
6444
#endif
6445
#ifdef USE_CODE_COPY
6446
           "-no-code-copy   disable code copy acceleration\n"
6447
#endif
6448
#ifdef TARGET_I386
6449
           "-std-vga        simulate a standard VGA card with VESA Bochs Extensions\n"
6450
           "                (default is CL-GD5446 PCI VGA)\n"
6451
           "-no-acpi        disable ACPI\n"
6452
#endif
6453
           "-no-reboot      exit instead of rebooting\n"
6454
           "-loadvm file    start right away with a saved state (loadvm in monitor)\n"
6455
           "-vnc display    start a VNC server on display\n"
6456
#ifndef _WIN32
6457
           "-daemonize      daemonize QEMU after initializing\n"
6458
#endif
6459
           "-option-rom rom load a file, rom, into the option ROM space\n"
6460
           "\n"
6461
           "During emulation, the following keys are useful:\n"
6462
           "ctrl-alt-f      toggle full screen\n"
6463
           "ctrl-alt-n      switch to virtual console 'n'\n"
6464
           "ctrl-alt        toggle mouse and keyboard grab\n"
6465
           "\n"
6466
           "When using -nographic, press 'ctrl-a h' to get some help.\n"
6467
           ,
6468
           "qemu",
6469
           DEFAULT_RAM_SIZE,
6470
#ifndef _WIN32
6471
           DEFAULT_NETWORK_SCRIPT,
6472
#endif
6473
           DEFAULT_GDBSTUB_PORT,
6474
           "/tmp/qemu.log");
6475
    exit(1);
6476
}
6477

    
6478
#define HAS_ARG 0x0001
6479

    
6480
enum {
6481
    QEMU_OPTION_h,
6482

    
6483
    QEMU_OPTION_M,
6484
    QEMU_OPTION_cpu,
6485
    QEMU_OPTION_fda,
6486
    QEMU_OPTION_fdb,
6487
    QEMU_OPTION_hda,
6488
    QEMU_OPTION_hdb,
6489
    QEMU_OPTION_hdc,
6490
    QEMU_OPTION_hdd,
6491
    QEMU_OPTION_cdrom,
6492
    QEMU_OPTION_boot,
6493
    QEMU_OPTION_snapshot,
6494
#ifdef TARGET_I386
6495
    QEMU_OPTION_no_fd_bootchk,
6496
#endif
6497
    QEMU_OPTION_m,
6498
    QEMU_OPTION_nographic,
6499
#ifdef HAS_AUDIO
6500
    QEMU_OPTION_audio_help,
6501
    QEMU_OPTION_soundhw,
6502
#endif
6503

    
6504
    QEMU_OPTION_net,
6505
    QEMU_OPTION_tftp,
6506
    QEMU_OPTION_bootp,
6507
    QEMU_OPTION_smb,
6508
    QEMU_OPTION_redir,
6509

    
6510
    QEMU_OPTION_kernel,
6511
    QEMU_OPTION_append,
6512
    QEMU_OPTION_initrd,
6513

    
6514
    QEMU_OPTION_S,
6515
    QEMU_OPTION_s,
6516
    QEMU_OPTION_p,
6517
    QEMU_OPTION_d,
6518
    QEMU_OPTION_hdachs,
6519
    QEMU_OPTION_L,
6520
    QEMU_OPTION_no_code_copy,
6521
    QEMU_OPTION_k,
6522
    QEMU_OPTION_localtime,
6523
    QEMU_OPTION_cirrusvga,
6524
    QEMU_OPTION_g,
6525
    QEMU_OPTION_std_vga,
6526
    QEMU_OPTION_echr,
6527
    QEMU_OPTION_monitor,
6528
    QEMU_OPTION_serial,
6529
    QEMU_OPTION_parallel,
6530
    QEMU_OPTION_loadvm,
6531
    QEMU_OPTION_full_screen,
6532
    QEMU_OPTION_no_frame,
6533
    QEMU_OPTION_no_quit,
6534
    QEMU_OPTION_pidfile,
6535
    QEMU_OPTION_no_kqemu,
6536
    QEMU_OPTION_kernel_kqemu,
6537
    QEMU_OPTION_win2k_hack,
6538
    QEMU_OPTION_usb,
6539
    QEMU_OPTION_usbdevice,
6540
    QEMU_OPTION_smp,
6541
    QEMU_OPTION_vnc,
6542
    QEMU_OPTION_no_acpi,
6543
    QEMU_OPTION_no_reboot,
6544
    QEMU_OPTION_daemonize,
6545
    QEMU_OPTION_option_rom,
6546
    QEMU_OPTION_semihosting,
6547
    QEMU_OPTION_name,
6548
};
6549

    
6550
typedef struct QEMUOption {
6551
    const char *name;
6552
    int flags;
6553
    int index;
6554
} QEMUOption;
6555

    
6556
const QEMUOption qemu_options[] = {
6557
    { "h", 0, QEMU_OPTION_h },
6558
    { "help", 0, QEMU_OPTION_h },
6559

    
6560
    { "M", HAS_ARG, QEMU_OPTION_M },
6561
    { "cpu", HAS_ARG, QEMU_OPTION_cpu },
6562
    { "fda", HAS_ARG, QEMU_OPTION_fda },
6563
    { "fdb", HAS_ARG, QEMU_OPTION_fdb },
6564
    { "hda", HAS_ARG, QEMU_OPTION_hda },
6565
    { "hdb", HAS_ARG, QEMU_OPTION_hdb },
6566
    { "hdc", HAS_ARG, QEMU_OPTION_hdc },
6567
    { "hdd", HAS_ARG, QEMU_OPTION_hdd },
6568
    { "cdrom", HAS_ARG, QEMU_OPTION_cdrom },
6569
    { "boot", HAS_ARG, QEMU_OPTION_boot },
6570
    { "snapshot", 0, QEMU_OPTION_snapshot },
6571
#ifdef TARGET_I386
6572
    { "no-fd-bootchk", 0, QEMU_OPTION_no_fd_bootchk },
6573
#endif
6574
    { "m", HAS_ARG, QEMU_OPTION_m },
6575
    { "nographic", 0, QEMU_OPTION_nographic },
6576
    { "k", HAS_ARG, QEMU_OPTION_k },
6577
#ifdef HAS_AUDIO
6578
    { "audio-help", 0, QEMU_OPTION_audio_help },
6579
    { "soundhw", HAS_ARG, QEMU_OPTION_soundhw },
6580
#endif
6581

    
6582
    { "net", HAS_ARG, QEMU_OPTION_net},
6583
#ifdef CONFIG_SLIRP
6584
    { "tftp", HAS_ARG, QEMU_OPTION_tftp },
6585
    { "bootp", HAS_ARG, QEMU_OPTION_bootp },
6586
#ifndef _WIN32
6587
    { "smb", HAS_ARG, QEMU_OPTION_smb },
6588
#endif
6589
    { "redir", HAS_ARG, QEMU_OPTION_redir },
6590
#endif
6591

    
6592
    { "kernel", HAS_ARG, QEMU_OPTION_kernel },
6593
    { "append", HAS_ARG, QEMU_OPTION_append },
6594
    { "initrd", HAS_ARG, QEMU_OPTION_initrd },
6595

    
6596
    { "S", 0, QEMU_OPTION_S },
6597
    { "s", 0, QEMU_OPTION_s },
6598
    { "p", HAS_ARG, QEMU_OPTION_p },
6599
    { "d", HAS_ARG, QEMU_OPTION_d },
6600
    { "hdachs", HAS_ARG, QEMU_OPTION_hdachs },
6601
    { "L", HAS_ARG, QEMU_OPTION_L },
6602
    { "no-code-copy", 0, QEMU_OPTION_no_code_copy },
6603
#ifdef USE_KQEMU
6604
    { "no-kqemu", 0, QEMU_OPTION_no_kqemu },
6605
    { "kernel-kqemu", 0, QEMU_OPTION_kernel_kqemu },
6606
#endif
6607
#if defined(TARGET_PPC) || defined(TARGET_SPARC)
6608
    { "g", 1, QEMU_OPTION_g },
6609
#endif
6610
    { "localtime", 0, QEMU_OPTION_localtime },
6611
    { "std-vga", 0, QEMU_OPTION_std_vga },
6612
    { "echr", 1, QEMU_OPTION_echr },
6613
    { "monitor", 1, QEMU_OPTION_monitor },
6614
    { "serial", 1, QEMU_OPTION_serial },
6615
    { "parallel", 1, QEMU_OPTION_parallel },
6616
    { "loadvm", HAS_ARG, QEMU_OPTION_loadvm },
6617
    { "full-screen", 0, QEMU_OPTION_full_screen },
6618
#ifdef CONFIG_SDL
6619
    { "no-frame", 0, QEMU_OPTION_no_frame },
6620
    { "no-quit", 0, QEMU_OPTION_no_quit },
6621
#endif
6622
    { "pidfile", HAS_ARG, QEMU_OPTION_pidfile },
6623
    { "win2k-hack", 0, QEMU_OPTION_win2k_hack },
6624
    { "usbdevice", HAS_ARG, QEMU_OPTION_usbdevice },
6625
    { "smp", HAS_ARG, QEMU_OPTION_smp },
6626
    { "vnc", HAS_ARG, QEMU_OPTION_vnc },
6627

    
6628
    /* temporary options */
6629
    { "usb", 0, QEMU_OPTION_usb },
6630
    { "cirrusvga", 0, QEMU_OPTION_cirrusvga },
6631
    { "no-acpi", 0, QEMU_OPTION_no_acpi },
6632
    { "no-reboot", 0, QEMU_OPTION_no_reboot },
6633
    { "daemonize", 0, QEMU_OPTION_daemonize },
6634
    { "option-rom", HAS_ARG, QEMU_OPTION_option_rom },
6635
#if defined(TARGET_ARM)
6636
    { "semihosting", 0, QEMU_OPTION_semihosting },
6637
#endif
6638
    { "name", HAS_ARG, QEMU_OPTION_name },
6639
    { NULL },
6640
};
6641

    
6642
#if defined (TARGET_I386) && defined(USE_CODE_COPY)
6643

    
6644
/* this stack is only used during signal handling */
6645
#define SIGNAL_STACK_SIZE 32768
6646

    
6647
static uint8_t *signal_stack;
6648

    
6649
#endif
6650

    
6651
/* password input */
6652

    
6653
static BlockDriverState *get_bdrv(int index)
6654
{
6655
    BlockDriverState *bs;
6656

    
6657
    if (index < 4) {
6658
        bs = bs_table[index];
6659
    } else if (index < 6) {
6660
        bs = fd_table[index - 4];
6661
    } else {
6662
        bs = NULL;
6663
    }
6664
    return bs;
6665
}
6666

    
6667
static void read_passwords(void)
6668
{
6669
    BlockDriverState *bs;
6670
    int i, j;
6671
    char password[256];
6672

    
6673
    for(i = 0; i < 6; i++) {
6674
        bs = get_bdrv(i);
6675
        if (bs && bdrv_is_encrypted(bs)) {
6676
            term_printf("%s is encrypted.\n", bdrv_get_device_name(bs));
6677
            for(j = 0; j < 3; j++) {
6678
                monitor_readline("Password: ", 
6679
                                 1, password, sizeof(password));
6680
                if (bdrv_set_key(bs, password) == 0)
6681
                    break;
6682
                term_printf("invalid password\n");
6683
            }
6684
        }
6685
    }
6686
}
6687

    
6688
/* XXX: currently we cannot use simultaneously different CPUs */
6689
void register_machines(void)
6690
{
6691
#if defined(TARGET_I386)
6692
    qemu_register_machine(&pc_machine);
6693
    qemu_register_machine(&isapc_machine);
6694
#elif defined(TARGET_PPC)
6695
    qemu_register_machine(&heathrow_machine);
6696
    qemu_register_machine(&core99_machine);
6697
    qemu_register_machine(&prep_machine);
6698
#elif defined(TARGET_MIPS)
6699
    qemu_register_machine(&mips_machine);
6700
    qemu_register_machine(&mips_malta_machine);
6701
#elif defined(TARGET_SPARC)
6702
#ifdef TARGET_SPARC64
6703
    qemu_register_machine(&sun4u_machine);
6704
#else
6705
    qemu_register_machine(&sun4m_machine);
6706
#endif
6707
#elif defined(TARGET_ARM)
6708
    qemu_register_machine(&integratorcp_machine);
6709
    qemu_register_machine(&versatilepb_machine);
6710
    qemu_register_machine(&versatileab_machine);
6711
    qemu_register_machine(&realview_machine);
6712
#elif defined(TARGET_SH4)
6713
    qemu_register_machine(&shix_machine);
6714
#else
6715
#error unsupported CPU
6716
#endif
6717
}
6718

    
6719
#ifdef HAS_AUDIO
6720
struct soundhw soundhw[] = {
6721
#ifdef TARGET_I386
6722
    {
6723
        "pcspk",
6724
        "PC speaker",
6725
        0,
6726
        1,
6727
        { .init_isa = pcspk_audio_init }
6728
    },
6729
#endif
6730
    {
6731
        "sb16",
6732
        "Creative Sound Blaster 16",
6733
        0,
6734
        1,
6735
        { .init_isa = SB16_init }
6736
    },
6737

    
6738
#ifdef CONFIG_ADLIB
6739
    {
6740
        "adlib",
6741
#ifdef HAS_YMF262
6742
        "Yamaha YMF262 (OPL3)",
6743
#else
6744
        "Yamaha YM3812 (OPL2)",
6745
#endif
6746
        0,
6747
        1,
6748
        { .init_isa = Adlib_init }
6749
    },
6750
#endif
6751

    
6752
#ifdef CONFIG_GUS
6753
    {
6754
        "gus",
6755
        "Gravis Ultrasound GF1",
6756
        0,
6757
        1,
6758
        { .init_isa = GUS_init }
6759
    },
6760
#endif
6761

    
6762
    {
6763
        "es1370",
6764
        "ENSONIQ AudioPCI ES1370",
6765
        0,
6766
        0,
6767
        { .init_pci = es1370_init }
6768
    },
6769

    
6770
    { NULL, NULL, 0, 0, { NULL } }
6771
};
6772

    
6773
static void select_soundhw (const char *optarg)
6774
{
6775
    struct soundhw *c;
6776

    
6777
    if (*optarg == '?') {
6778
    show_valid_cards:
6779

    
6780
        printf ("Valid sound card names (comma separated):\n");
6781
        for (c = soundhw; c->name; ++c) {
6782
            printf ("%-11s %s\n", c->name, c->descr);
6783
        }
6784
        printf ("\n-soundhw all will enable all of the above\n");
6785
        exit (*optarg != '?');
6786
    }
6787
    else {
6788
        size_t l;
6789
        const char *p;
6790
        char *e;
6791
        int bad_card = 0;
6792

    
6793
        if (!strcmp (optarg, "all")) {
6794
            for (c = soundhw; c->name; ++c) {
6795
                c->enabled = 1;
6796
            }
6797
            return;
6798
        }
6799

    
6800
        p = optarg;
6801
        while (*p) {
6802
            e = strchr (p, ',');
6803
            l = !e ? strlen (p) : (size_t) (e - p);
6804

    
6805
            for (c = soundhw; c->name; ++c) {
6806
                if (!strncmp (c->name, p, l)) {
6807
                    c->enabled = 1;
6808
                    break;
6809
                }
6810
            }
6811

    
6812
            if (!c->name) {
6813
                if (l > 80) {
6814
                    fprintf (stderr,
6815
                             "Unknown sound card name (too big to show)\n");
6816
                }
6817
                else {
6818
                    fprintf (stderr, "Unknown sound card name `%.*s'\n",
6819
                             (int) l, p);
6820
                }
6821
                bad_card = 1;
6822
            }
6823
            p += l + (e != NULL);
6824
        }
6825

    
6826
        if (bad_card)
6827
            goto show_valid_cards;
6828
    }
6829
}
6830
#endif
6831

    
6832
#ifdef _WIN32
6833
static BOOL WINAPI qemu_ctrl_handler(DWORD type)
6834
{
6835
    exit(STATUS_CONTROL_C_EXIT);
6836
    return TRUE;
6837
}
6838
#endif
6839

    
6840
#define MAX_NET_CLIENTS 32
6841

    
6842
int main(int argc, char **argv)
6843
{
6844
#ifdef CONFIG_GDBSTUB
6845
    int use_gdbstub;
6846
    const char *gdbstub_port;
6847
#endif
6848
    int i, cdrom_index;
6849
    int snapshot, linux_boot;
6850
    const char *initrd_filename;
6851
    const char *hd_filename[MAX_DISKS], *fd_filename[MAX_FD];
6852
    const char *kernel_filename, *kernel_cmdline;
6853
    DisplayState *ds = &display_state;
6854
    int cyls, heads, secs, translation;
6855
    char net_clients[MAX_NET_CLIENTS][256];
6856
    int nb_net_clients;
6857
    int optind;
6858
    const char *r, *optarg;
6859
    CharDriverState *monitor_hd;
6860
    char monitor_device[128];
6861
    char serial_devices[MAX_SERIAL_PORTS][128];
6862
    int serial_device_index;
6863
    char parallel_devices[MAX_PARALLEL_PORTS][128];
6864
    int parallel_device_index;
6865
    const char *loadvm = NULL;
6866
    QEMUMachine *machine;
6867
    const char *cpu_model;
6868
    char usb_devices[MAX_USB_CMDLINE][128];
6869
    int usb_devices_index;
6870
    int fds[2];
6871
    const char *pid_file = NULL;
6872

    
6873
    LIST_INIT (&vm_change_state_head);
6874
#ifndef _WIN32
6875
    {
6876
        struct sigaction act;
6877
        sigfillset(&act.sa_mask);
6878
        act.sa_flags = 0;
6879
        act.sa_handler = SIG_IGN;
6880
        sigaction(SIGPIPE, &act, NULL);
6881
    }
6882
#else
6883
    SetConsoleCtrlHandler(qemu_ctrl_handler, TRUE);
6884
    /* Note: cpu_interrupt() is currently not SMP safe, so we force
6885
       QEMU to run on a single CPU */
6886
    {
6887
        HANDLE h;
6888
        DWORD mask, smask;
6889
        int i;
6890
        h = GetCurrentProcess();
6891
        if (GetProcessAffinityMask(h, &mask, &smask)) {
6892
            for(i = 0; i < 32; i++) {
6893
                if (mask & (1 << i))
6894
                    break;
6895
            }
6896
            if (i != 32) {
6897
                mask = 1 << i;
6898
                SetProcessAffinityMask(h, mask);
6899
            }
6900
        }
6901
    }
6902
#endif
6903

    
6904
    register_machines();
6905
    machine = first_machine;
6906
    cpu_model = NULL;
6907
    initrd_filename = NULL;
6908
    for(i = 0; i < MAX_FD; i++)
6909
        fd_filename[i] = NULL;
6910
    for(i = 0; i < MAX_DISKS; i++)
6911
        hd_filename[i] = NULL;
6912
    ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
6913
    vga_ram_size = VGA_RAM_SIZE;
6914
#ifdef CONFIG_GDBSTUB
6915
    use_gdbstub = 0;
6916
    gdbstub_port = DEFAULT_GDBSTUB_PORT;
6917
#endif
6918
    snapshot = 0;
6919
    nographic = 0;
6920
    kernel_filename = NULL;
6921
    kernel_cmdline = "";
6922
#ifdef TARGET_PPC
6923
    cdrom_index = 1;
6924
#else
6925
    cdrom_index = 2;
6926
#endif
6927
    cyls = heads = secs = 0;
6928
    translation = BIOS_ATA_TRANSLATION_AUTO;
6929
    pstrcpy(monitor_device, sizeof(monitor_device), "vc");
6930

    
6931
    pstrcpy(serial_devices[0], sizeof(serial_devices[0]), "vc");
6932
    for(i = 1; i < MAX_SERIAL_PORTS; i++)
6933
        serial_devices[i][0] = '\0';
6934
    serial_device_index = 0;
6935
    
6936
    pstrcpy(parallel_devices[0], sizeof(parallel_devices[0]), "vc");
6937
    for(i = 1; i < MAX_PARALLEL_PORTS; i++)
6938
        parallel_devices[i][0] = '\0';
6939
    parallel_device_index = 0;
6940
    
6941
    usb_devices_index = 0;
6942
    
6943
    nb_net_clients = 0;
6944

    
6945
    nb_nics = 0;
6946
    /* default mac address of the first network interface */
6947
    
6948
    optind = 1;
6949
    for(;;) {
6950
        if (optind >= argc)
6951
            break;
6952
        r = argv[optind];
6953
        if (r[0] != '-') {
6954
            hd_filename[0] = argv[optind++];
6955
        } else {
6956
            const QEMUOption *popt;
6957

    
6958
            optind++;
6959
            /* Treat --foo the same as -foo.  */
6960
            if (r[1] == '-')
6961
                r++;
6962
            popt = qemu_options;
6963
            for(;;) {
6964
                if (!popt->name) {
6965
                    fprintf(stderr, "%s: invalid option -- '%s'\n", 
6966
                            argv[0], r);
6967
                    exit(1);
6968
                }
6969
                if (!strcmp(popt->name, r + 1))
6970
                    break;
6971
                popt++;
6972
            }
6973
            if (popt->flags & HAS_ARG) {
6974
                if (optind >= argc) {
6975
                    fprintf(stderr, "%s: option '%s' requires an argument\n",
6976
                            argv[0], r);
6977
                    exit(1);
6978
                }
6979
                optarg = argv[optind++];
6980
            } else {
6981
                optarg = NULL;
6982
            }
6983

    
6984
            switch(popt->index) {
6985
            case QEMU_OPTION_M:
6986
                machine = find_machine(optarg);
6987
                if (!machine) {
6988
                    QEMUMachine *m;
6989
                    printf("Supported machines are:\n");
6990
                    for(m = first_machine; m != NULL; m = m->next) {
6991
                        printf("%-10s %s%s\n",
6992
                               m->name, m->desc, 
6993
                               m == first_machine ? " (default)" : "");
6994
                    }
6995
                    exit(1);
6996
                }
6997
                break;
6998
            case QEMU_OPTION_cpu:
6999
                /* hw initialization will check this */
7000
                if (optarg[0] == '?') {
7001
#if defined(TARGET_PPC)
7002
                    ppc_cpu_list(stdout, &fprintf);
7003
#elif defined(TARGET_ARM)
7004
                    arm_cpu_list();
7005
#elif defined(TARGET_MIPS)
7006
                    mips_cpu_list(stdout, &fprintf);
7007
#endif
7008
                    exit(1);
7009
                } else {
7010
                    cpu_model = optarg;
7011
                }
7012
                break;
7013
            case QEMU_OPTION_initrd:
7014
                initrd_filename = optarg;
7015
                break;
7016
            case QEMU_OPTION_hda:
7017
            case QEMU_OPTION_hdb:
7018
            case QEMU_OPTION_hdc:
7019
            case QEMU_OPTION_hdd:
7020
                {
7021
                    int hd_index;
7022
                    hd_index = popt->index - QEMU_OPTION_hda;
7023
                    hd_filename[hd_index] = optarg;
7024
                    if (hd_index == cdrom_index)
7025
                        cdrom_index = -1;
7026
                }
7027
                break;
7028
            case QEMU_OPTION_snapshot:
7029
                snapshot = 1;
7030
                break;
7031
            case QEMU_OPTION_hdachs:
7032
                {
7033
                    const char *p;
7034
                    p = optarg;
7035
                    cyls = strtol(p, (char **)&p, 0);
7036
                    if (cyls < 1 || cyls > 16383)
7037
                        goto chs_fail;
7038
                    if (*p != ',')
7039
                        goto chs_fail;
7040
                    p++;
7041
                    heads = strtol(p, (char **)&p, 0);
7042
                    if (heads < 1 || heads > 16)
7043
                        goto chs_fail;
7044
                    if (*p != ',')
7045
                        goto chs_fail;
7046
                    p++;
7047
                    secs = strtol(p, (char **)&p, 0);
7048
                    if (secs < 1 || secs > 63)
7049
                        goto chs_fail;
7050
                    if (*p == ',') {
7051
                        p++;
7052
                        if (!strcmp(p, "none"))
7053
                            translation = BIOS_ATA_TRANSLATION_NONE;
7054
                        else if (!strcmp(p, "lba"))
7055
                            translation = BIOS_ATA_TRANSLATION_LBA;
7056
                        else if (!strcmp(p, "auto"))
7057
                            translation = BIOS_ATA_TRANSLATION_AUTO;
7058
                        else
7059
                            goto chs_fail;
7060
                    } else if (*p != '\0') {
7061
                    chs_fail:
7062
                        fprintf(stderr, "qemu: invalid physical CHS format\n");
7063
                        exit(1);
7064
                    }
7065
                }
7066
                break;
7067
            case QEMU_OPTION_nographic:
7068
                pstrcpy(serial_devices[0], sizeof(serial_devices[0]), "stdio");
7069
                pstrcpy(monitor_device, sizeof(monitor_device), "stdio");
7070
                nographic = 1;
7071
                break;
7072
            case QEMU_OPTION_kernel:
7073
                kernel_filename = optarg;
7074
                break;
7075
            case QEMU_OPTION_append:
7076
                kernel_cmdline = optarg;
7077
                break;
7078
            case QEMU_OPTION_cdrom:
7079
                if (cdrom_index >= 0) {
7080
                    hd_filename[cdrom_index] = optarg;
7081
                }
7082
                break;
7083
            case QEMU_OPTION_boot:
7084
                boot_device = optarg[0];
7085
                if (boot_device != 'a' && 
7086
#if defined(TARGET_SPARC) || defined(TARGET_I386)
7087
                    // Network boot
7088
                    boot_device != 'n' &&
7089
#endif
7090
                    boot_device != 'c' && boot_device != 'd') {
7091
                    fprintf(stderr, "qemu: invalid boot device '%c'\n", boot_device);
7092
                    exit(1);
7093
                }
7094
                break;
7095
            case QEMU_OPTION_fda:
7096
                fd_filename[0] = optarg;
7097
                break;
7098
            case QEMU_OPTION_fdb:
7099
                fd_filename[1] = optarg;
7100
                break;
7101
#ifdef TARGET_I386
7102
            case QEMU_OPTION_no_fd_bootchk:
7103
                fd_bootchk = 0;
7104
                break;
7105
#endif
7106
            case QEMU_OPTION_no_code_copy:
7107
                code_copy_enabled = 0;
7108
                break;
7109
            case QEMU_OPTION_net:
7110
                if (nb_net_clients >= MAX_NET_CLIENTS) {
7111
                    fprintf(stderr, "qemu: too many network clients\n");
7112
                    exit(1);
7113
                }
7114
                pstrcpy(net_clients[nb_net_clients],
7115
                        sizeof(net_clients[0]),
7116
                        optarg);
7117
                nb_net_clients++;
7118
                break;
7119
#ifdef CONFIG_SLIRP
7120
            case QEMU_OPTION_tftp:
7121
                tftp_prefix = optarg;
7122
                break;
7123
            case QEMU_OPTION_bootp:
7124
                bootp_filename = optarg;
7125
                break;
7126
#ifndef _WIN32
7127
            case QEMU_OPTION_smb:
7128
                net_slirp_smb(optarg);
7129
                break;
7130
#endif
7131
            case QEMU_OPTION_redir:
7132
                net_slirp_redir(optarg);                
7133
                break;
7134
#endif
7135
#ifdef HAS_AUDIO
7136
            case QEMU_OPTION_audio_help:
7137
                AUD_help ();
7138
                exit (0);
7139
                break;
7140
            case QEMU_OPTION_soundhw:
7141
                select_soundhw (optarg);
7142
                break;
7143
#endif
7144
            case QEMU_OPTION_h:
7145
                help();
7146
                break;
7147
            case QEMU_OPTION_m:
7148
                ram_size = atoi(optarg) * 1024 * 1024;
7149
                if (ram_size <= 0)
7150
                    help();
7151
                if (ram_size > PHYS_RAM_MAX_SIZE) {
7152
                    fprintf(stderr, "qemu: at most %d MB RAM can be simulated\n",
7153
                            PHYS_RAM_MAX_SIZE / (1024 * 1024));
7154
                    exit(1);
7155
                }
7156
                break;
7157
            case QEMU_OPTION_d:
7158
                {
7159
                    int mask;
7160
                    CPULogItem *item;
7161
                    
7162
                    mask = cpu_str_to_log_mask(optarg);
7163
                    if (!mask) {
7164
                        printf("Log items (comma separated):\n");
7165
                    for(item = cpu_log_items; item->mask != 0; item++) {
7166
                        printf("%-10s %s\n", item->name, item->help);
7167
                    }
7168
                    exit(1);
7169
                    }
7170
                    cpu_set_log(mask);
7171
                }
7172
                break;
7173
#ifdef CONFIG_GDBSTUB
7174
            case QEMU_OPTION_s:
7175
                use_gdbstub = 1;
7176
                break;
7177
            case QEMU_OPTION_p:
7178
                gdbstub_port = optarg;
7179
                break;
7180
#endif
7181
            case QEMU_OPTION_L:
7182
                bios_dir = optarg;
7183
                break;
7184
            case QEMU_OPTION_S:
7185
                autostart = 0;
7186
                break;
7187
            case QEMU_OPTION_k:
7188
                keyboard_layout = optarg;
7189
                break;
7190
            case QEMU_OPTION_localtime:
7191
                rtc_utc = 0;
7192
                break;
7193
            case QEMU_OPTION_cirrusvga:
7194
                cirrus_vga_enabled = 1;
7195
                break;
7196
            case QEMU_OPTION_std_vga:
7197
                cirrus_vga_enabled = 0;
7198
                break;
7199
            case QEMU_OPTION_g:
7200
                {
7201
                    const char *p;
7202
                    int w, h, depth;
7203
                    p = optarg;
7204
                    w = strtol(p, (char **)&p, 10);
7205
                    if (w <= 0) {
7206
                    graphic_error:
7207
                        fprintf(stderr, "qemu: invalid resolution or depth\n");
7208
                        exit(1);
7209
                    }
7210
                    if (*p != 'x')
7211
                        goto graphic_error;
7212
                    p++;
7213
                    h = strtol(p, (char **)&p, 10);
7214
                    if (h <= 0)
7215
                        goto graphic_error;
7216
                    if (*p == 'x') {
7217
                        p++;
7218
                        depth = strtol(p, (char **)&p, 10);
7219
                        if (depth != 8 && depth != 15 && depth != 16 && 
7220
                            depth != 24 && depth != 32)
7221
                            goto graphic_error;
7222
                    } else if (*p == '\0') {
7223
                        depth = graphic_depth;
7224
                    } else {
7225
                        goto graphic_error;
7226
                    }
7227
                    
7228
                    graphic_width = w;
7229
                    graphic_height = h;
7230
                    graphic_depth = depth;
7231
                }
7232
                break;
7233
            case QEMU_OPTION_echr:
7234
                {
7235
                    char *r;
7236
                    term_escape_char = strtol(optarg, &r, 0);
7237
                    if (r == optarg)
7238
                        printf("Bad argument to echr\n");
7239
                    break;
7240
                }
7241
            case QEMU_OPTION_monitor:
7242
                pstrcpy(monitor_device, sizeof(monitor_device), optarg);
7243
                break;
7244
            case QEMU_OPTION_serial:
7245
                if (serial_device_index >= MAX_SERIAL_PORTS) {
7246
                    fprintf(stderr, "qemu: too many serial ports\n");
7247
                    exit(1);
7248
                }
7249
                pstrcpy(serial_devices[serial_device_index], 
7250
                        sizeof(serial_devices[0]), optarg);
7251
                serial_device_index++;
7252
                break;
7253
            case QEMU_OPTION_parallel:
7254
                if (parallel_device_index >= MAX_PARALLEL_PORTS) {
7255
                    fprintf(stderr, "qemu: too many parallel ports\n");
7256
                    exit(1);
7257
                }
7258
                pstrcpy(parallel_devices[parallel_device_index], 
7259
                        sizeof(parallel_devices[0]), optarg);
7260
                parallel_device_index++;
7261
                break;
7262
            case QEMU_OPTION_loadvm:
7263
                loadvm = optarg;
7264
                break;
7265
            case QEMU_OPTION_full_screen:
7266
                full_screen = 1;
7267
                break;
7268
#ifdef CONFIG_SDL
7269
            case QEMU_OPTION_no_frame:
7270
                no_frame = 1;
7271
                break;
7272
            case QEMU_OPTION_no_quit:
7273
                no_quit = 1;
7274
                break;
7275
#endif
7276
            case QEMU_OPTION_pidfile:
7277
                pid_file = optarg;
7278
                break;
7279
#ifdef TARGET_I386
7280
            case QEMU_OPTION_win2k_hack:
7281
                win2k_install_hack = 1;
7282
                break;
7283
#endif
7284
#ifdef USE_KQEMU
7285
            case QEMU_OPTION_no_kqemu:
7286
                kqemu_allowed = 0;
7287
                break;
7288
            case QEMU_OPTION_kernel_kqemu:
7289
                kqemu_allowed = 2;
7290
                break;
7291
#endif
7292
            case QEMU_OPTION_usb:
7293
                usb_enabled = 1;
7294
                break;
7295
            case QEMU_OPTION_usbdevice:
7296
                usb_enabled = 1;
7297
                if (usb_devices_index >= MAX_USB_CMDLINE) {
7298
                    fprintf(stderr, "Too many USB devices\n");
7299
                    exit(1);
7300
                }
7301
                pstrcpy(usb_devices[usb_devices_index],
7302
                        sizeof(usb_devices[usb_devices_index]),
7303
                        optarg);
7304
                usb_devices_index++;
7305
                break;
7306
            case QEMU_OPTION_smp:
7307
                smp_cpus = atoi(optarg);
7308
                if (smp_cpus < 1 || smp_cpus > MAX_CPUS) {
7309
                    fprintf(stderr, "Invalid number of CPUs\n");
7310
                    exit(1);
7311
                }
7312
                break;
7313
            case QEMU_OPTION_vnc:
7314
                vnc_display = optarg;
7315
                break;
7316
            case QEMU_OPTION_no_acpi:
7317
                acpi_enabled = 0;
7318
                break;
7319
            case QEMU_OPTION_no_reboot:
7320
                no_reboot = 1;
7321
                break;
7322
            case QEMU_OPTION_daemonize:
7323
                daemonize = 1;
7324
                break;
7325
            case QEMU_OPTION_option_rom:
7326
                if (nb_option_roms >= MAX_OPTION_ROMS) {
7327
                    fprintf(stderr, "Too many option ROMs\n");
7328
                    exit(1);
7329
                }
7330
                option_rom[nb_option_roms] = optarg;
7331
                nb_option_roms++;
7332
                break;
7333
            case QEMU_OPTION_semihosting:
7334
                semihosting_enabled = 1;
7335
                break;
7336
            case QEMU_OPTION_name:
7337
                qemu_name = optarg;
7338
                break;
7339
            }
7340
        }
7341
    }
7342

    
7343
#ifndef _WIN32
7344
    if (daemonize && !nographic && vnc_display == NULL) {
7345
        fprintf(stderr, "Can only daemonize if using -nographic or -vnc\n");
7346
        daemonize = 0;
7347
    }
7348

    
7349
    if (daemonize) {
7350
        pid_t pid;
7351

    
7352
        if (pipe(fds) == -1)
7353
            exit(1);
7354

    
7355
        pid = fork();
7356
        if (pid > 0) {
7357
            uint8_t status;
7358
            ssize_t len;
7359

    
7360
            close(fds[1]);
7361

    
7362
        again:
7363
            len = read(fds[0], &status, 1);
7364
            if (len == -1 && (errno == EINTR))
7365
                goto again;
7366

    
7367
            if (len != 1)
7368
                exit(1);
7369
            else if (status == 1) {
7370
                fprintf(stderr, "Could not acquire pidfile\n");
7371
                exit(1);
7372
            } else
7373
                exit(0);
7374
        } else if (pid < 0)
7375
            exit(1);
7376

    
7377
        setsid();
7378

    
7379
        pid = fork();
7380
        if (pid > 0)
7381
            exit(0);
7382
        else if (pid < 0)
7383
            exit(1);
7384

    
7385
        umask(027);
7386
        chdir("/");
7387

    
7388
        signal(SIGTSTP, SIG_IGN);
7389
        signal(SIGTTOU, SIG_IGN);
7390
        signal(SIGTTIN, SIG_IGN);
7391
    }
7392
#endif
7393

    
7394
    if (pid_file && create_pidfile(pid_file) != 0) {
7395
        if (daemonize) {
7396
            uint8_t status = 1;
7397
            write(fds[1], &status, 1);
7398
        } else
7399
            fprintf(stderr, "Could not acquire pid file\n");
7400
        exit(1);
7401
    }
7402

    
7403
#ifdef USE_KQEMU
7404
    if (smp_cpus > 1)
7405
        kqemu_allowed = 0;
7406
#endif
7407
    linux_boot = (kernel_filename != NULL);
7408

    
7409
    if (!linux_boot &&
7410
        boot_device != 'n' &&
7411
        hd_filename[0] == '\0' && 
7412
        (cdrom_index >= 0 && hd_filename[cdrom_index] == '\0') &&
7413
        fd_filename[0] == '\0')
7414
        help();
7415

    
7416
    /* boot to floppy or the default cd if no hard disk defined yet */
7417
    if (hd_filename[0] == '\0' && boot_device == 'c') {
7418
        if (fd_filename[0] != '\0')
7419
            boot_device = 'a';
7420
        else
7421
            boot_device = 'd';
7422
    }
7423

    
7424
    setvbuf(stdout, NULL, _IOLBF, 0);
7425
    
7426
    init_timers();
7427
    init_timer_alarm();
7428
    qemu_aio_init();
7429

    
7430
#ifdef _WIN32
7431
    socket_init();
7432
#endif
7433

    
7434
    /* init network clients */
7435
    if (nb_net_clients == 0) {
7436
        /* if no clients, we use a default config */
7437
        pstrcpy(net_clients[0], sizeof(net_clients[0]),
7438
                "nic");
7439
        pstrcpy(net_clients[1], sizeof(net_clients[0]),
7440
                "user");
7441
        nb_net_clients = 2;
7442
    }
7443

    
7444
    for(i = 0;i < nb_net_clients; i++) {
7445
        if (net_client_init(net_clients[i]) < 0)
7446
            exit(1);
7447
    }
7448

    
7449
#ifdef TARGET_I386
7450
    if (boot_device == 'n') {
7451
        for (i = 0; i < nb_nics; i++) {
7452
            const char *model = nd_table[i].model;
7453
            char buf[1024];
7454
            if (model == NULL)
7455
                model = "ne2k_pci";
7456
            snprintf(buf, sizeof(buf), "%s/pxe-%s.bin", bios_dir, model);
7457
            if (get_image_size(buf) > 0) {
7458
                option_rom[nb_option_roms] = strdup(buf);
7459
                nb_option_roms++;
7460
                break;
7461
            }
7462
        }
7463
        if (i == nb_nics) {
7464
            fprintf(stderr, "No valid PXE rom found for network device\n");
7465
            exit(1);
7466
        }
7467
        boot_device = 'c'; /* to prevent confusion by the BIOS */
7468
    }
7469
#endif
7470

    
7471
    /* init the memory */
7472
    phys_ram_size = ram_size + vga_ram_size + MAX_BIOS_SIZE;
7473

    
7474
    phys_ram_base = qemu_vmalloc(phys_ram_size);
7475
    if (!phys_ram_base) {
7476
        fprintf(stderr, "Could not allocate physical memory\n");
7477
        exit(1);
7478
    }
7479

    
7480
    /* we always create the cdrom drive, even if no disk is there */
7481
    bdrv_init();
7482
    if (cdrom_index >= 0) {
7483
        bs_table[cdrom_index] = bdrv_new("cdrom");
7484
        bdrv_set_type_hint(bs_table[cdrom_index], BDRV_TYPE_CDROM);
7485
    }
7486

    
7487
    /* open the virtual block devices */
7488
    for(i = 0; i < MAX_DISKS; i++) {
7489
        if (hd_filename[i]) {
7490
            if (!bs_table[i]) {
7491
                char buf[64];
7492
                snprintf(buf, sizeof(buf), "hd%c", i + 'a');
7493
                bs_table[i] = bdrv_new(buf);
7494
            }
7495
            if (bdrv_open(bs_table[i], hd_filename[i], snapshot ? BDRV_O_SNAPSHOT : 0) < 0) {
7496
                fprintf(stderr, "qemu: could not open hard disk image '%s'\n",
7497
                        hd_filename[i]);
7498
                exit(1);
7499
            }
7500
            if (i == 0 && cyls != 0) {
7501
                bdrv_set_geometry_hint(bs_table[i], cyls, heads, secs);
7502
                bdrv_set_translation_hint(bs_table[i], translation);
7503
            }
7504
        }
7505
    }
7506

    
7507
    /* we always create at least one floppy disk */
7508
    fd_table[0] = bdrv_new("fda");
7509
    bdrv_set_type_hint(fd_table[0], BDRV_TYPE_FLOPPY);
7510

    
7511
    for(i = 0; i < MAX_FD; i++) {
7512
        if (fd_filename[i]) {
7513
            if (!fd_table[i]) {
7514
                char buf[64];
7515
                snprintf(buf, sizeof(buf), "fd%c", i + 'a');
7516
                fd_table[i] = bdrv_new(buf);
7517
                bdrv_set_type_hint(fd_table[i], BDRV_TYPE_FLOPPY);
7518
            }
7519
            if (fd_filename[i] != '\0') {
7520
                if (bdrv_open(fd_table[i], fd_filename[i],
7521
                              snapshot ? BDRV_O_SNAPSHOT : 0) < 0) {
7522
                    fprintf(stderr, "qemu: could not open floppy disk image '%s'\n",
7523
                            fd_filename[i]);
7524
                    exit(1);
7525
                }
7526
            }
7527
        }
7528
    }
7529

    
7530
    register_savevm("timer", 0, 2, timer_save, timer_load, NULL);
7531
    register_savevm("ram", 0, 2, ram_save, ram_load, NULL);
7532

    
7533
    init_ioports();
7534

    
7535
    /* terminal init */
7536
    if (nographic) {
7537
        dumb_display_init(ds);
7538
    } else if (vnc_display != NULL) {
7539
        vnc_display_init(ds, vnc_display);
7540
    } else {
7541
#if defined(CONFIG_SDL)
7542
        sdl_display_init(ds, full_screen, no_frame);
7543
#elif defined(CONFIG_COCOA)
7544
        cocoa_display_init(ds, full_screen);
7545
#else
7546
        dumb_display_init(ds);
7547
#endif
7548
    }
7549

    
7550
    /* Maintain compatibility with multiple stdio monitors */
7551
    if (!strcmp(monitor_device,"stdio")) {
7552
        for (i = 0; i < MAX_SERIAL_PORTS; i++) {
7553
            if (!strcmp(serial_devices[i],"mon:stdio")) {
7554
                monitor_device[0] = '\0';
7555
                break;
7556
            } else if (!strcmp(serial_devices[i],"stdio")) {
7557
                monitor_device[0] = '\0';
7558
                pstrcpy(serial_devices[0], sizeof(serial_devices[0]), "mon:stdio");
7559
                break;
7560
            }
7561
        }
7562
    }
7563
    if (monitor_device[0] != '\0') {
7564
        monitor_hd = qemu_chr_open(monitor_device);
7565
        if (!monitor_hd) {
7566
            fprintf(stderr, "qemu: could not open monitor device '%s'\n", monitor_device);
7567
            exit(1);
7568
        }
7569
        monitor_init(monitor_hd, !nographic);
7570
    }
7571

    
7572
    for(i = 0; i < MAX_SERIAL_PORTS; i++) {
7573
        const char *devname = serial_devices[i];
7574
        if (devname[0] != '\0' && strcmp(devname, "none")) {
7575
            serial_hds[i] = qemu_chr_open(devname);
7576
            if (!serial_hds[i]) {
7577
                fprintf(stderr, "qemu: could not open serial device '%s'\n", 
7578
                        devname);
7579
                exit(1);
7580
            }
7581
            if (!strcmp(devname, "vc"))
7582
                qemu_chr_printf(serial_hds[i], "serial%d console\r\n", i);
7583
        }
7584
    }
7585

    
7586
    for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
7587
        const char *devname = parallel_devices[i];
7588
        if (devname[0] != '\0' && strcmp(devname, "none")) {
7589
            parallel_hds[i] = qemu_chr_open(devname);
7590
            if (!parallel_hds[i]) {
7591
                fprintf(stderr, "qemu: could not open parallel device '%s'\n", 
7592
                        devname);
7593
                exit(1);
7594
            }
7595
            if (!strcmp(devname, "vc"))
7596
                qemu_chr_printf(parallel_hds[i], "parallel%d console\r\n", i);
7597
        }
7598
    }
7599

    
7600
    machine->init(ram_size, vga_ram_size, boot_device,
7601
                  ds, fd_filename, snapshot,
7602
                  kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
7603

    
7604
    /* init USB devices */
7605
    if (usb_enabled) {
7606
        for(i = 0; i < usb_devices_index; i++) {
7607
            if (usb_device_add(usb_devices[i]) < 0) {
7608
                fprintf(stderr, "Warning: could not add USB device %s\n",
7609
                        usb_devices[i]);
7610
            }
7611
        }
7612
    }
7613

    
7614
    gui_timer = qemu_new_timer(rt_clock, gui_update, NULL);
7615
    qemu_mod_timer(gui_timer, qemu_get_clock(rt_clock));
7616

    
7617
#ifdef CONFIG_GDBSTUB
7618
    if (use_gdbstub) {
7619
        /* XXX: use standard host:port notation and modify options
7620
           accordingly. */
7621
        if (gdbserver_start(gdbstub_port) < 0) {
7622
            fprintf(stderr, "qemu: could not open gdbstub device on port '%s'\n",
7623
                    gdbstub_port);
7624
            exit(1);
7625
        }
7626
    } else 
7627
#endif
7628
    if (loadvm)
7629
        do_loadvm(loadvm);
7630

    
7631
    {
7632
        /* XXX: simplify init */
7633
        read_passwords();
7634
        if (autostart) {
7635
            vm_start();
7636
        }
7637
    }
7638

    
7639
    if (daemonize) {
7640
        uint8_t status = 0;
7641
        ssize_t len;
7642
        int fd;
7643

    
7644
    again1:
7645
        len = write(fds[1], &status, 1);
7646
        if (len == -1 && (errno == EINTR))
7647
            goto again1;
7648

    
7649
        if (len != 1)
7650
            exit(1);
7651

    
7652
        fd = open("/dev/null", O_RDWR);
7653
        if (fd == -1)
7654
            exit(1);
7655

    
7656
        dup2(fd, 0);
7657
        dup2(fd, 1);
7658
        dup2(fd, 2);
7659

    
7660
        close(fd);
7661
    }
7662

    
7663
    main_loop();
7664
    quit_timers();
7665
    return 0;
7666
}