Statistics
| Branch: | Revision:

root / vl.c @ a39437aa

History | View | Annotate | Download (195.1 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
#ifdef _WIN32
2854
                } else if (err == WSAEALREADY) {
2855
                    break;
2856
#endif
2857
                } else {
2858
                    goto fail;
2859
                }
2860
            } else {
2861
                s->connected = 1;
2862
                break;
2863
            }
2864
        }
2865
        s->fd = fd;
2866
        socket_set_nodelay(fd);
2867
        if (s->connected)
2868
            tcp_chr_connect(chr);
2869
        else
2870
            qemu_set_fd_handler(s->fd, NULL, tcp_chr_connect, chr);
2871
    }
2872
    
2873
    if (is_listen && is_waitconnect) {
2874
        printf("QEMU waiting for connection on: %s\n", host_str);
2875
        tcp_chr_accept(chr);
2876
        socket_set_nonblock(s->listen_fd);
2877
    }
2878

    
2879
    return chr;
2880
 fail:
2881
    if (fd >= 0)
2882
        closesocket(fd);
2883
    qemu_free(s);
2884
    qemu_free(chr);
2885
    return NULL;
2886
}
2887

    
2888
CharDriverState *qemu_chr_open(const char *filename)
2889
{
2890
    const char *p;
2891

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

    
2953
void qemu_chr_close(CharDriverState *chr)
2954
{
2955
    if (chr->chr_close)
2956
        chr->chr_close(chr);
2957
}
2958

    
2959
/***********************************************************/
2960
/* network device redirectors */
2961

    
2962
void hex_dump(FILE *f, const uint8_t *buf, int size)
2963
{
2964
    int len, i, j, c;
2965

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

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

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

    
3025
int parse_host_src_port(struct sockaddr_in *haddr,
3026
                        struct sockaddr_in *saddr,
3027
                        const char *input_str)
3028
{
3029
    char *str = strdup(input_str);
3030
    char *host_str = str;
3031
    char *src_str;
3032
    char *ptr;
3033

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

    
3042
    if ((src_str = strchr(input_str,'@'))) {
3043
        *src_str = '\0';
3044
        src_str++;
3045
    }
3046

    
3047
    if (parse_host_port(haddr, host_str) < 0)
3048
        goto fail;
3049

    
3050
    if (!src_str || *src_str == '\0')
3051
        src_str = ":0";
3052

    
3053
    if (parse_host_port(saddr, src_str) < 0)
3054
        goto fail;
3055

    
3056
    free(str);
3057
    return(0);
3058

    
3059
fail:
3060
    free(str);
3061
    return -1;
3062
}
3063

    
3064
int parse_host_port(struct sockaddr_in *saddr, const char *str)
3065
{
3066
    char buf[512];
3067
    struct hostent *he;
3068
    const char *p, *r;
3069
    int port;
3070

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

    
3094
#ifndef _WIN32
3095
static int parse_unix_path(struct sockaddr_un *uaddr, const char *str)
3096
{
3097
    const char *p;
3098
    int len;
3099

    
3100
    len = MIN(108, strlen(str));
3101
    p = strchr(str, ',');
3102
    if (p)
3103
        len = MIN(len, p - str);
3104

    
3105
    memset(uaddr, 0, sizeof(*uaddr));
3106

    
3107
    uaddr->sun_family = AF_UNIX;
3108
    memcpy(uaddr->sun_path, str, len);
3109

    
3110
    return 0;
3111
}
3112
#endif
3113

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

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

    
3148
    vc->next = NULL;
3149
    pvc = &vlan->first_client;
3150
    while (*pvc != NULL)
3151
        pvc = &(*pvc)->next;
3152
    *pvc = vc;
3153
    return vc;
3154
}
3155

    
3156
int qemu_can_send_packet(VLANClientState *vc1)
3157
{
3158
    VLANState *vlan = vc1->vlan;
3159
    VLANClientState *vc;
3160

    
3161
    for(vc = vlan->first_client; vc != NULL; vc = vc->next) {
3162
        if (vc != vc1) {
3163
            if (vc->fd_can_read && !vc->fd_can_read(vc->opaque))
3164
                return 0;
3165
        }
3166
    }
3167
    return 1;
3168
}
3169

    
3170
void qemu_send_packet(VLANClientState *vc1, const uint8_t *buf, int size)
3171
{
3172
    VLANState *vlan = vc1->vlan;
3173
    VLANClientState *vc;
3174

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

    
3186
#if defined(CONFIG_SLIRP)
3187

    
3188
/* slirp network adapter */
3189

    
3190
static int slirp_inited;
3191
static VLANClientState *slirp_vc;
3192

    
3193
int slirp_can_output(void)
3194
{
3195
    return !slirp_vc || qemu_can_send_packet(slirp_vc);
3196
}
3197

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

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

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

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

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

    
3254
    if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
3255
        goto fail;
3256
    host_port = strtol(buf, &r, 0);
3257
    if (r == buf)
3258
        goto fail;
3259

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

    
3284
char smb_dir[1024];
3285

    
3286
static void smb_exit(void)
3287
{
3288
    DIR *d;
3289
    struct dirent *de;
3290
    char filename[1024];
3291

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

    
3309
/* automatic user mode samba server configuration */
3310
void net_slirp_smb(const char *exported_dir)
3311
{
3312
    char smb_conf[1024];
3313
    char smb_cmdline[1024];
3314
    FILE *f;
3315

    
3316
    if (!slirp_inited) {
3317
        slirp_inited = 1;
3318
        slirp_init();
3319
    }
3320

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

    
3358
    snprintf(smb_cmdline, sizeof(smb_cmdline), "%s -s %s",
3359
             SMBD_COMMAND, smb_conf);
3360
    
3361
    slirp_add_exec(0, smb_cmdline, 4, 139);
3362
}
3363

    
3364
#endif /* !defined(_WIN32) */
3365

    
3366
#endif /* CONFIG_SLIRP */
3367

    
3368
#if !defined(_WIN32)
3369

    
3370
typedef struct TAPState {
3371
    VLANClientState *vc;
3372
    int fd;
3373
} TAPState;
3374

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

    
3388
static void tap_send(void *opaque)
3389
{
3390
    TAPState *s = opaque;
3391
    uint8_t buf[4096];
3392
    int size;
3393

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

    
3408
/* fd support */
3409

    
3410
static TAPState *net_tap_fd_init(VLANState *vlan, int fd)
3411
{
3412
    TAPState *s;
3413

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

    
3424
#ifdef _BSD
3425
static int tap_open(char *ifname, int ifname_size)
3426
{
3427
    int fd;
3428
    char *dev;
3429
    struct stat s;
3430

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

    
3437
    fstat(fd, &s);
3438
    dev = devname(s.st_rdev, S_IFCHR);
3439
    pstrcpy(ifname, ifname_size, dev);
3440

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

    
3456
    static int arp_fd = 0;
3457
    int ip_muxid, arp_muxid;
3458
    struct strioctl  strioc_if, strioc_ppa;
3459
    int link_type = I_PLINK;;
3460
    struct lifreq ifr;
3461
    char actual_name[32] = "";
3462

    
3463
    memset(&ifr, 0x0, sizeof(ifr));
3464

    
3465
    if( *dev ){
3466
       ptr = dev;        
3467
       while( *ptr && !isdigit((int)*ptr) ) ptr++; 
3468
       ppa = atoi(ptr);
3469
    }
3470

    
3471
    /* Check if IP device was opened */
3472
    if( ip_fd )
3473
       close(ip_fd);
3474

    
3475
    if( (ip_fd = open("/dev/udp", O_RDWR, 0)) < 0){
3476
       syslog(LOG_ERR, "Can't open /dev/ip (actually /dev/udp)");
3477
       return -1;
3478
    }
3479

    
3480
    if( (tap_fd = open("/dev/tap", O_RDWR, 0)) < 0){
3481
       syslog(LOG_ERR, "Can't open /dev/tap");
3482
       return -1;
3483
    }
3484

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

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

    
3502
    if (ioctl(if_fd, SIOCGLIFFLAGS, &ifr) < 0)
3503
        syslog(LOG_ERR, "Can't get flags\n");
3504

    
3505
    snprintf (actual_name, 32, "tap%d", ppa);
3506
    strncpy (ifr.lifr_name, actual_name, sizeof (ifr.lifr_name));
3507

    
3508
    ifr.lifr_ppa = ppa;
3509
    /* Assign ppa according to the unit number returned by tun device */
3510

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

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

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

    
3537
    if((ip_muxid = ioctl(ip_fd, I_LINK, if_fd)) < 0){
3538
       syslog(LOG_ERR, "Can't link TAP device to IP");
3539
       return -1;
3540
    }
3541

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

    
3545
    close (if_fd);
3546

    
3547
    memset(&ifr, 0x0, sizeof(ifr));
3548
    strncpy (ifr.lifr_name, actual_name, sizeof (ifr.lifr_name));
3549
    ifr.lifr_ip_muxid  = ip_muxid;
3550
    ifr.lifr_arp_muxid = arp_muxid;
3551

    
3552
    if (ioctl (ip_fd, SIOCSLIFMUXID, &ifr) < 0)
3553
    {
3554
      ioctl (ip_fd, I_PUNLINK , arp_muxid);
3555
      ioctl (ip_fd, I_PUNLINK, ip_muxid);
3556
      syslog (LOG_ERR, "Can't set multiplexor id");
3557
    }
3558

    
3559
    sprintf(dev, "tap%d", ppa);
3560
    return tap_fd;
3561
}
3562

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

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

    
3613
    if (ifname1 != NULL)
3614
        pstrcpy(ifname, sizeof(ifname), ifname1);
3615
    else
3616
        ifname[0] = '\0';
3617
    fd = tap_open(ifname, sizeof(ifname));
3618
    if (fd < 0)
3619
        return -1;
3620

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

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

    
3660
#endif /* !_WIN32 */
3661

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

    
3673
typedef struct NetSocketListenState {
3674
    VLANState *vlan;
3675
    int fd;
3676
} NetSocketListenState;
3677

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

    
3685
    send_all(s->fd, (const uint8_t *)&len, sizeof(len));
3686
    send_all(s->fd, buf, size);
3687
}
3688

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

    
3696
static void net_socket_send(void *opaque)
3697
{
3698
    NetSocketState *s = opaque;
3699
    int l, size, err;
3700
    uint8_t buf1[4096];
3701
    const uint8_t *buf;
3702

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

    
3752
static void net_socket_send_dgram(void *opaque)
3753
{
3754
    NetSocketState *s = opaque;
3755
    int size;
3756

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

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

    
3779
    }
3780
    fd = socket(PF_INET, SOCK_DGRAM, 0);
3781
    if (fd < 0) {
3782
        perror("socket(PF_INET, SOCK_DGRAM)");
3783
        return -1;
3784
    }
3785

    
3786
    val = 1;
3787
    ret=setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, 
3788
                   (const char *)&val, sizeof(val));
3789
    if (ret < 0) {
3790
        perror("setsockopt(SOL_SOCKET, SO_REUSEADDR)");
3791
        goto fail;
3792
    }
3793

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

    
3804
    ret = setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, 
3805
                     (const char *)&imr, sizeof(struct ip_mreq));
3806
    if (ret < 0) {
3807
        perror("setsockopt(IP_ADD_MEMBERSHIP)");
3808
        goto fail;
3809
    }
3810

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

    
3820
    socket_set_nonblock(fd);
3821
    return fd;
3822
fail:
3823
    if (fd >= 0) 
3824
        closesocket(fd);
3825
    return -1;
3826
}
3827

    
3828
static NetSocketState *net_socket_fd_init_dgram(VLANState *vlan, int fd, 
3829
                                          int is_connected)
3830
{
3831
    struct sockaddr_in saddr;
3832
    int newfd;
3833
    socklen_t saddr_len;
3834
    NetSocketState *s;
3835

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

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

    
3867
    s = qemu_mallocz(sizeof(NetSocketState));
3868
    if (!s)
3869
        return NULL;
3870
    s->fd = fd;
3871

    
3872
    s->vc = qemu_new_vlan_client(vlan, net_socket_receive_dgram, NULL, s);
3873
    qemu_set_fd_handler(s->fd, net_socket_send_dgram, NULL, s);
3874

    
3875
    /* mcast: save bound address as dst */
3876
    if (is_connected) s->dgram_dst=saddr;
3877

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

    
3885
static void net_socket_connect(void *opaque)
3886
{
3887
    NetSocketState *s = opaque;
3888
    qemu_set_fd_handler(s->fd, net_socket_send, NULL, s);
3889
}
3890

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

    
3911
static NetSocketState *net_socket_fd_init(VLANState *vlan, int fd, 
3912
                                          int is_connected)
3913
{
3914
    int so_type=-1, optlen=sizeof(so_type);
3915

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

    
3933
static void net_socket_accept(void *opaque)
3934
{
3935
    NetSocketListenState *s = opaque;    
3936
    NetSocketState *s1;
3937
    struct sockaddr_in saddr;
3938
    socklen_t len;
3939
    int fd;
3940

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

    
3960
static int net_socket_listen_init(VLANState *vlan, const char *host_str)
3961
{
3962
    NetSocketListenState *s;
3963
    int fd, val, ret;
3964
    struct sockaddr_in saddr;
3965

    
3966
    if (parse_host_port(&saddr, host_str) < 0)
3967
        return -1;
3968
    
3969
    s = qemu_mallocz(sizeof(NetSocketListenState));
3970
    if (!s)
3971
        return -1;
3972

    
3973
    fd = socket(PF_INET, SOCK_STREAM, 0);
3974
    if (fd < 0) {
3975
        perror("socket");
3976
        return -1;
3977
    }
3978
    socket_set_nonblock(fd);
3979

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

    
4000
static int net_socket_connect_init(VLANState *vlan, const char *host_str)
4001
{
4002
    NetSocketState *s;
4003
    int fd, connected, ret, err;
4004
    struct sockaddr_in saddr;
4005

    
4006
    if (parse_host_port(&saddr, host_str) < 0)
4007
        return -1;
4008

    
4009
    fd = socket(PF_INET, SOCK_STREAM, 0);
4010
    if (fd < 0) {
4011
        perror("socket");
4012
        return -1;
4013
    }
4014
    socket_set_nonblock(fd);
4015

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

    
4047
static int net_socket_mcast_init(VLANState *vlan, const char *host_str)
4048
{
4049
    NetSocketState *s;
4050
    int fd;
4051
    struct sockaddr_in saddr;
4052

    
4053
    if (parse_host_port(&saddr, host_str) < 0)
4054
        return -1;
4055

    
4056

    
4057
    fd = net_socket_mcast_create(&saddr);
4058
    if (fd < 0)
4059
        return -1;
4060

    
4061
    s = net_socket_fd_init(vlan, fd, 0);
4062
    if (!s)
4063
        return -1;
4064

    
4065
    s->dgram_dst = saddr;
4066
    
4067
    snprintf(s->vc->info_str, sizeof(s->vc->info_str),
4068
             "socket: mcast=%s:%d", 
4069
             inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
4070
    return 0;
4071

    
4072
}
4073

    
4074
static int get_param_value(char *buf, int buf_size,
4075
                           const char *tag, const char *str)
4076
{
4077
    const char *p;
4078
    char *q;
4079
    char option[128];
4080

    
4081
    p = str;
4082
    for(;;) {
4083
        q = option;
4084
        while (*p != '\0' && *p != '=') {
4085
            if ((q - option) < sizeof(option) - 1)
4086
                *q++ = *p;
4087
            p++;
4088
        }
4089
        *q = '\0';
4090
        if (*p != '=')
4091
            break;
4092
        p++;
4093
        if (!strcmp(tag, option)) {
4094
            q = buf;
4095
            while (*p != '\0' && *p != ',') {
4096
                if ((q - buf) < buf_size - 1)
4097
                    *q++ = *p;
4098
                p++;
4099
            }
4100
            *q = '\0';
4101
            return q - buf;
4102
        } else {
4103
            while (*p != '\0' && *p != ',') {
4104
                p++;
4105
            }
4106
        }
4107
        if (*p != ',')
4108
            break;
4109
        p++;
4110
    }
4111
    return 0;
4112
}
4113

    
4114
static int net_client_init(const char *str)
4115
{
4116
    const char *p;
4117
    char *q;
4118
    char device[64];
4119
    char buf[1024];
4120
    int vlan_id, ret;
4121
    VLANState *vlan;
4122

    
4123
    p = str;
4124
    q = device;
4125
    while (*p != '\0' && *p != ',') {
4126
        if ((q - device) < sizeof(device) - 1)
4127
            *q++ = *p;
4128
        p++;
4129
    }
4130
    *q = '\0';
4131
    if (*p == ',')
4132
        p++;
4133
    vlan_id = 0;
4134
    if (get_param_value(buf, sizeof(buf), "vlan", p)) {
4135
        vlan_id = strtol(buf, NULL, 0);
4136
    }
4137
    vlan = qemu_find_vlan(vlan_id);
4138
    if (!vlan) {
4139
        fprintf(stderr, "Could not create vlan %d\n", vlan_id);
4140
        return -1;
4141
    }
4142
    if (!strcmp(device, "nic")) {
4143
        NICInfo *nd;
4144
        uint8_t *macaddr;
4145

    
4146
        if (nb_nics >= MAX_NICS) {
4147
            fprintf(stderr, "Too Many NICs\n");
4148
            return -1;
4149
        }
4150
        nd = &nd_table[nb_nics];
4151
        macaddr = nd->macaddr;
4152
        macaddr[0] = 0x52;
4153
        macaddr[1] = 0x54;
4154
        macaddr[2] = 0x00;
4155
        macaddr[3] = 0x12;
4156
        macaddr[4] = 0x34;
4157
        macaddr[5] = 0x56 + nb_nics;
4158

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

    
4244
void do_info_network(void)
4245
{
4246
    VLANState *vlan;
4247
    VLANClientState *vc;
4248

    
4249
    for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) {
4250
        term_printf("VLAN %d devices:\n", vlan->id);
4251
        for(vc = vlan->first_client; vc != NULL; vc = vc->next)
4252
            term_printf("  %s\n", vc->info_str);
4253
    }
4254
}
4255

    
4256
/***********************************************************/
4257
/* USB devices */
4258

    
4259
static USBPort *used_usb_ports;
4260
static USBPort *free_usb_ports;
4261

    
4262
/* ??? Maybe change this to register a hub to keep track of the topology.  */
4263
void qemu_register_usb_port(USBPort *port, void *opaque, int index,
4264
                            usb_attachfn attach)
4265
{
4266
    port->opaque = opaque;
4267
    port->index = index;
4268
    port->attach = attach;
4269
    port->next = free_usb_ports;
4270
    free_usb_ports = port;
4271
}
4272

    
4273
static int usb_device_add(const char *devname)
4274
{
4275
    const char *p;
4276
    USBDevice *dev;
4277
    USBPort *port;
4278

    
4279
    if (!free_usb_ports)
4280
        return -1;
4281

    
4282
    if (strstart(devname, "host:", &p)) {
4283
        dev = usb_host_device_open(p);
4284
    } else if (!strcmp(devname, "mouse")) {
4285
        dev = usb_mouse_init();
4286
    } else if (!strcmp(devname, "tablet")) {
4287
        dev = usb_tablet_init();
4288
    } else if (strstart(devname, "disk:", &p)) {
4289
        dev = usb_msd_init(p);
4290
    } else {
4291
        return -1;
4292
    }
4293
    if (!dev)
4294
        return -1;
4295

    
4296
    /* Find a USB port to add the device to.  */
4297
    port = free_usb_ports;
4298
    if (!port->next) {
4299
        USBDevice *hub;
4300

    
4301
        /* Create a new hub and chain it on.  */
4302
        free_usb_ports = NULL;
4303
        port->next = used_usb_ports;
4304
        used_usb_ports = port;
4305

    
4306
        hub = usb_hub_init(VM_USB_HUB_SIZE);
4307
        usb_attach(port, hub);
4308
        port = free_usb_ports;
4309
    }
4310

    
4311
    free_usb_ports = port->next;
4312
    port->next = used_usb_ports;
4313
    used_usb_ports = port;
4314
    usb_attach(port, dev);
4315
    return 0;
4316
}
4317

    
4318
static int usb_device_del(const char *devname)
4319
{
4320
    USBPort *port;
4321
    USBPort **lastp;
4322
    USBDevice *dev;
4323
    int bus_num, addr;
4324
    const char *p;
4325

    
4326
    if (!used_usb_ports)
4327
        return -1;
4328

    
4329
    p = strchr(devname, '.');
4330
    if (!p) 
4331
        return -1;
4332
    bus_num = strtoul(devname, NULL, 0);
4333
    addr = strtoul(p + 1, NULL, 0);
4334
    if (bus_num != 0)
4335
        return -1;
4336

    
4337
    lastp = &used_usb_ports;
4338
    port = used_usb_ports;
4339
    while (port && port->dev->addr != addr) {
4340
        lastp = &port->next;
4341
        port = port->next;
4342
    }
4343

    
4344
    if (!port)
4345
        return -1;
4346

    
4347
    dev = port->dev;
4348
    *lastp = port->next;
4349
    usb_attach(port, NULL);
4350
    dev->handle_destroy(dev);
4351
    port->next = free_usb_ports;
4352
    free_usb_ports = port;
4353
    return 0;
4354
}
4355

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

    
4364
void do_usb_del(const char *devname)
4365
{
4366
    int ret;
4367
    ret = usb_device_del(devname);
4368
    if (ret < 0) 
4369
        term_printf("Could not remove USB device '%s'\n", devname);
4370
}
4371

    
4372
void usb_info(void)
4373
{
4374
    USBDevice *dev;
4375
    USBPort *port;
4376
    const char *speed_str;
4377

    
4378
    if (!usb_enabled) {
4379
        term_printf("USB support not enabled\n");
4380
        return;
4381
    }
4382

    
4383
    for (port = used_usb_ports; port; port = port->next) {
4384
        dev = port->dev;
4385
        if (!dev)
4386
            continue;
4387
        switch(dev->speed) {
4388
        case USB_SPEED_LOW: 
4389
            speed_str = "1.5"; 
4390
            break;
4391
        case USB_SPEED_FULL: 
4392
            speed_str = "12"; 
4393
            break;
4394
        case USB_SPEED_HIGH: 
4395
            speed_str = "480"; 
4396
            break;
4397
        default:
4398
            speed_str = "?"; 
4399
            break;
4400
        }
4401
        term_printf("  Device %d.%d, Speed %s Mb/s, Product %s\n", 
4402
                    0, dev->addr, speed_str, dev->devname);
4403
    }
4404
}
4405

    
4406
static int create_pidfile(const char *filename)
4407
{
4408
    int fd;
4409
    char buffer[128];
4410
    int len;
4411

    
4412
    fd = open(filename, O_RDWR | O_CREAT, 0600);
4413
    if (fd == -1)
4414
        return -1;
4415

    
4416
    /* XXX: No locking for Win32 implemented */
4417
#ifndef _WIN32
4418
    if (lockf(fd, F_TLOCK, 0) == -1)
4419
        return -1;
4420
#endif
4421

    
4422
    len = snprintf(buffer, sizeof(buffer), "%ld\n", (long)getpid());
4423
    if (write(fd, buffer, len) != len)
4424
        return -1;
4425

    
4426
    return 0;
4427
}
4428

    
4429
/***********************************************************/
4430
/* dumb display */
4431

    
4432
static void dumb_update(DisplayState *ds, int x, int y, int w, int h)
4433
{
4434
}
4435

    
4436
static void dumb_resize(DisplayState *ds, int w, int h)
4437
{
4438
}
4439

    
4440
static void dumb_refresh(DisplayState *ds)
4441
{
4442
    vga_hw_update();
4443
}
4444

    
4445
void dumb_display_init(DisplayState *ds)
4446
{
4447
    ds->data = NULL;
4448
    ds->linesize = 0;
4449
    ds->depth = 0;
4450
    ds->dpy_update = dumb_update;
4451
    ds->dpy_resize = dumb_resize;
4452
    ds->dpy_refresh = dumb_refresh;
4453
}
4454

    
4455
/***********************************************************/
4456
/* I/O handling */
4457

    
4458
#define MAX_IO_HANDLERS 64
4459

    
4460
typedef struct IOHandlerRecord {
4461
    int fd;
4462
    IOCanRWHandler *fd_read_poll;
4463
    IOHandler *fd_read;
4464
    IOHandler *fd_write;
4465
    int deleted;
4466
    void *opaque;
4467
    /* temporary data */
4468
    struct pollfd *ufd;
4469
    struct IOHandlerRecord *next;
4470
} IOHandlerRecord;
4471

    
4472
static IOHandlerRecord *first_io_handler;
4473

    
4474
/* XXX: fd_read_poll should be suppressed, but an API change is
4475
   necessary in the character devices to suppress fd_can_read(). */
4476
int qemu_set_fd_handler2(int fd, 
4477
                         IOCanRWHandler *fd_read_poll, 
4478
                         IOHandler *fd_read, 
4479
                         IOHandler *fd_write, 
4480
                         void *opaque)
4481
{
4482
    IOHandlerRecord **pioh, *ioh;
4483

    
4484
    if (!fd_read && !fd_write) {
4485
        pioh = &first_io_handler;
4486
        for(;;) {
4487
            ioh = *pioh;
4488
            if (ioh == NULL)
4489
                break;
4490
            if (ioh->fd == fd) {
4491
                ioh->deleted = 1;
4492
                break;
4493
            }
4494
            pioh = &ioh->next;
4495
        }
4496
    } else {
4497
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
4498
            if (ioh->fd == fd)
4499
                goto found;
4500
        }
4501
        ioh = qemu_mallocz(sizeof(IOHandlerRecord));
4502
        if (!ioh)
4503
            return -1;
4504
        ioh->next = first_io_handler;
4505
        first_io_handler = ioh;
4506
    found:
4507
        ioh->fd = fd;
4508
        ioh->fd_read_poll = fd_read_poll;
4509
        ioh->fd_read = fd_read;
4510
        ioh->fd_write = fd_write;
4511
        ioh->opaque = opaque;
4512
        ioh->deleted = 0;
4513
    }
4514
    return 0;
4515
}
4516

    
4517
int qemu_set_fd_handler(int fd, 
4518
                        IOHandler *fd_read, 
4519
                        IOHandler *fd_write, 
4520
                        void *opaque)
4521
{
4522
    return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
4523
}
4524

    
4525
/***********************************************************/
4526
/* Polling handling */
4527

    
4528
typedef struct PollingEntry {
4529
    PollingFunc *func;
4530
    void *opaque;
4531
    struct PollingEntry *next;
4532
} PollingEntry;
4533

    
4534
static PollingEntry *first_polling_entry;
4535

    
4536
int qemu_add_polling_cb(PollingFunc *func, void *opaque)
4537
{
4538
    PollingEntry **ppe, *pe;
4539
    pe = qemu_mallocz(sizeof(PollingEntry));
4540
    if (!pe)
4541
        return -1;
4542
    pe->func = func;
4543
    pe->opaque = opaque;
4544
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next);
4545
    *ppe = pe;
4546
    return 0;
4547
}
4548

    
4549
void qemu_del_polling_cb(PollingFunc *func, void *opaque)
4550
{
4551
    PollingEntry **ppe, *pe;
4552
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next) {
4553
        pe = *ppe;
4554
        if (pe->func == func && pe->opaque == opaque) {
4555
            *ppe = pe->next;
4556
            qemu_free(pe);
4557
            break;
4558
        }
4559
    }
4560
}
4561

    
4562
#ifdef _WIN32
4563
/***********************************************************/
4564
/* Wait objects support */
4565
typedef struct WaitObjects {
4566
    int num;
4567
    HANDLE events[MAXIMUM_WAIT_OBJECTS + 1];
4568
    WaitObjectFunc *func[MAXIMUM_WAIT_OBJECTS + 1];
4569
    void *opaque[MAXIMUM_WAIT_OBJECTS + 1];
4570
} WaitObjects;
4571

    
4572
static WaitObjects wait_objects = {0};
4573
    
4574
int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
4575
{
4576
    WaitObjects *w = &wait_objects;
4577

    
4578
    if (w->num >= MAXIMUM_WAIT_OBJECTS)
4579
        return -1;
4580
    w->events[w->num] = handle;
4581
    w->func[w->num] = func;
4582
    w->opaque[w->num] = opaque;
4583
    w->num++;
4584
    return 0;
4585
}
4586

    
4587
void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
4588
{
4589
    int i, found;
4590
    WaitObjects *w = &wait_objects;
4591

    
4592
    found = 0;
4593
    for (i = 0; i < w->num; i++) {
4594
        if (w->events[i] == handle)
4595
            found = 1;
4596
        if (found) {
4597
            w->events[i] = w->events[i + 1];
4598
            w->func[i] = w->func[i + 1];
4599
            w->opaque[i] = w->opaque[i + 1];
4600
        }            
4601
    }
4602
    if (found)
4603
        w->num--;
4604
}
4605
#endif
4606

    
4607
/***********************************************************/
4608
/* savevm/loadvm support */
4609

    
4610
#define IO_BUF_SIZE 32768
4611

    
4612
struct QEMUFile {
4613
    FILE *outfile;
4614
    BlockDriverState *bs;
4615
    int is_file;
4616
    int is_writable;
4617
    int64_t base_offset;
4618
    int64_t buf_offset; /* start of buffer when writing, end of buffer
4619
                           when reading */
4620
    int buf_index;
4621
    int buf_size; /* 0 when writing */
4622
    uint8_t buf[IO_BUF_SIZE];
4623
};
4624

    
4625
QEMUFile *qemu_fopen(const char *filename, const char *mode)
4626
{
4627
    QEMUFile *f;
4628

    
4629
    f = qemu_mallocz(sizeof(QEMUFile));
4630
    if (!f)
4631
        return NULL;
4632
    if (!strcmp(mode, "wb")) {
4633
        f->is_writable = 1;
4634
    } else if (!strcmp(mode, "rb")) {
4635
        f->is_writable = 0;
4636
    } else {
4637
        goto fail;
4638
    }
4639
    f->outfile = fopen(filename, mode);
4640
    if (!f->outfile)
4641
        goto fail;
4642
    f->is_file = 1;
4643
    return f;
4644
 fail:
4645
    if (f->outfile)
4646
        fclose(f->outfile);
4647
    qemu_free(f);
4648
    return NULL;
4649
}
4650

    
4651
QEMUFile *qemu_fopen_bdrv(BlockDriverState *bs, int64_t offset, int is_writable)
4652
{
4653
    QEMUFile *f;
4654

    
4655
    f = qemu_mallocz(sizeof(QEMUFile));
4656
    if (!f)
4657
        return NULL;
4658
    f->is_file = 0;
4659
    f->bs = bs;
4660
    f->is_writable = is_writable;
4661
    f->base_offset = offset;
4662
    return f;
4663
}
4664

    
4665
void qemu_fflush(QEMUFile *f)
4666
{
4667
    if (!f->is_writable)
4668
        return;
4669
    if (f->buf_index > 0) {
4670
        if (f->is_file) {
4671
            fseek(f->outfile, f->buf_offset, SEEK_SET);
4672
            fwrite(f->buf, 1, f->buf_index, f->outfile);
4673
        } else {
4674
            bdrv_pwrite(f->bs, f->base_offset + f->buf_offset, 
4675
                        f->buf, f->buf_index);
4676
        }
4677
        f->buf_offset += f->buf_index;
4678
        f->buf_index = 0;
4679
    }
4680
}
4681

    
4682
static void qemu_fill_buffer(QEMUFile *f)
4683
{
4684
    int len;
4685

    
4686
    if (f->is_writable)
4687
        return;
4688
    if (f->is_file) {
4689
        fseek(f->outfile, f->buf_offset, SEEK_SET);
4690
        len = fread(f->buf, 1, IO_BUF_SIZE, f->outfile);
4691
        if (len < 0)
4692
            len = 0;
4693
    } else {
4694
        len = bdrv_pread(f->bs, f->base_offset + f->buf_offset, 
4695
                         f->buf, IO_BUF_SIZE);
4696
        if (len < 0)
4697
            len = 0;
4698
    }
4699
    f->buf_index = 0;
4700
    f->buf_size = len;
4701
    f->buf_offset += len;
4702
}
4703

    
4704
void qemu_fclose(QEMUFile *f)
4705
{
4706
    if (f->is_writable)
4707
        qemu_fflush(f);
4708
    if (f->is_file) {
4709
        fclose(f->outfile);
4710
    }
4711
    qemu_free(f);
4712
}
4713

    
4714
void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size)
4715
{
4716
    int l;
4717
    while (size > 0) {
4718
        l = IO_BUF_SIZE - f->buf_index;
4719
        if (l > size)
4720
            l = size;
4721
        memcpy(f->buf + f->buf_index, buf, l);
4722
        f->buf_index += l;
4723
        buf += l;
4724
        size -= l;
4725
        if (f->buf_index >= IO_BUF_SIZE)
4726
            qemu_fflush(f);
4727
    }
4728
}
4729

    
4730
void qemu_put_byte(QEMUFile *f, int v)
4731
{
4732
    f->buf[f->buf_index++] = v;
4733
    if (f->buf_index >= IO_BUF_SIZE)
4734
        qemu_fflush(f);
4735
}
4736

    
4737
int qemu_get_buffer(QEMUFile *f, uint8_t *buf, int size1)
4738
{
4739
    int size, l;
4740

    
4741
    size = size1;
4742
    while (size > 0) {
4743
        l = f->buf_size - f->buf_index;
4744
        if (l == 0) {
4745
            qemu_fill_buffer(f);
4746
            l = f->buf_size - f->buf_index;
4747
            if (l == 0)
4748
                break;
4749
        }
4750
        if (l > size)
4751
            l = size;
4752
        memcpy(buf, f->buf + f->buf_index, l);
4753
        f->buf_index += l;
4754
        buf += l;
4755
        size -= l;
4756
    }
4757
    return size1 - size;
4758
}
4759

    
4760
int qemu_get_byte(QEMUFile *f)
4761
{
4762
    if (f->buf_index >= f->buf_size) {
4763
        qemu_fill_buffer(f);
4764
        if (f->buf_index >= f->buf_size)
4765
            return 0;
4766
    }
4767
    return f->buf[f->buf_index++];
4768
}
4769

    
4770
int64_t qemu_ftell(QEMUFile *f)
4771
{
4772
    return f->buf_offset - f->buf_size + f->buf_index;
4773
}
4774

    
4775
int64_t qemu_fseek(QEMUFile *f, int64_t pos, int whence)
4776
{
4777
    if (whence == SEEK_SET) {
4778
        /* nothing to do */
4779
    } else if (whence == SEEK_CUR) {
4780
        pos += qemu_ftell(f);
4781
    } else {
4782
        /* SEEK_END not supported */
4783
        return -1;
4784
    }
4785
    if (f->is_writable) {
4786
        qemu_fflush(f);
4787
        f->buf_offset = pos;
4788
    } else {
4789
        f->buf_offset = pos;
4790
        f->buf_index = 0;
4791
        f->buf_size = 0;
4792
    }
4793
    return pos;
4794
}
4795

    
4796
void qemu_put_be16(QEMUFile *f, unsigned int v)
4797
{
4798
    qemu_put_byte(f, v >> 8);
4799
    qemu_put_byte(f, v);
4800
}
4801

    
4802
void qemu_put_be32(QEMUFile *f, unsigned int v)
4803
{
4804
    qemu_put_byte(f, v >> 24);
4805
    qemu_put_byte(f, v >> 16);
4806
    qemu_put_byte(f, v >> 8);
4807
    qemu_put_byte(f, v);
4808
}
4809

    
4810
void qemu_put_be64(QEMUFile *f, uint64_t v)
4811
{
4812
    qemu_put_be32(f, v >> 32);
4813
    qemu_put_be32(f, v);
4814
}
4815

    
4816
unsigned int qemu_get_be16(QEMUFile *f)
4817
{
4818
    unsigned int v;
4819
    v = qemu_get_byte(f) << 8;
4820
    v |= qemu_get_byte(f);
4821
    return v;
4822
}
4823

    
4824
unsigned int qemu_get_be32(QEMUFile *f)
4825
{
4826
    unsigned int v;
4827
    v = qemu_get_byte(f) << 24;
4828
    v |= qemu_get_byte(f) << 16;
4829
    v |= qemu_get_byte(f) << 8;
4830
    v |= qemu_get_byte(f);
4831
    return v;
4832
}
4833

    
4834
uint64_t qemu_get_be64(QEMUFile *f)
4835
{
4836
    uint64_t v;
4837
    v = (uint64_t)qemu_get_be32(f) << 32;
4838
    v |= qemu_get_be32(f);
4839
    return v;
4840
}
4841

    
4842
typedef struct SaveStateEntry {
4843
    char idstr[256];
4844
    int instance_id;
4845
    int version_id;
4846
    SaveStateHandler *save_state;
4847
    LoadStateHandler *load_state;
4848
    void *opaque;
4849
    struct SaveStateEntry *next;
4850
} SaveStateEntry;
4851

    
4852
static SaveStateEntry *first_se;
4853

    
4854
int register_savevm(const char *idstr, 
4855
                    int instance_id, 
4856
                    int version_id,
4857
                    SaveStateHandler *save_state,
4858
                    LoadStateHandler *load_state,
4859
                    void *opaque)
4860
{
4861
    SaveStateEntry *se, **pse;
4862

    
4863
    se = qemu_malloc(sizeof(SaveStateEntry));
4864
    if (!se)
4865
        return -1;
4866
    pstrcpy(se->idstr, sizeof(se->idstr), idstr);
4867
    se->instance_id = instance_id;
4868
    se->version_id = version_id;
4869
    se->save_state = save_state;
4870
    se->load_state = load_state;
4871
    se->opaque = opaque;
4872
    se->next = NULL;
4873

    
4874
    /* add at the end of list */
4875
    pse = &first_se;
4876
    while (*pse != NULL)
4877
        pse = &(*pse)->next;
4878
    *pse = se;
4879
    return 0;
4880
}
4881

    
4882
#define QEMU_VM_FILE_MAGIC   0x5145564d
4883
#define QEMU_VM_FILE_VERSION 0x00000002
4884

    
4885
int qemu_savevm_state(QEMUFile *f)
4886
{
4887
    SaveStateEntry *se;
4888
    int len, ret;
4889
    int64_t cur_pos, len_pos, total_len_pos;
4890

    
4891
    qemu_put_be32(f, QEMU_VM_FILE_MAGIC);
4892
    qemu_put_be32(f, QEMU_VM_FILE_VERSION);
4893
    total_len_pos = qemu_ftell(f);
4894
    qemu_put_be64(f, 0); /* total size */
4895

    
4896
    for(se = first_se; se != NULL; se = se->next) {
4897
        /* ID string */
4898
        len = strlen(se->idstr);
4899
        qemu_put_byte(f, len);
4900
        qemu_put_buffer(f, se->idstr, len);
4901

    
4902
        qemu_put_be32(f, se->instance_id);
4903
        qemu_put_be32(f, se->version_id);
4904

    
4905
        /* record size: filled later */
4906
        len_pos = qemu_ftell(f);
4907
        qemu_put_be32(f, 0);
4908
        
4909
        se->save_state(f, se->opaque);
4910

    
4911
        /* fill record size */
4912
        cur_pos = qemu_ftell(f);
4913
        len = cur_pos - len_pos - 4;
4914
        qemu_fseek(f, len_pos, SEEK_SET);
4915
        qemu_put_be32(f, len);
4916
        qemu_fseek(f, cur_pos, SEEK_SET);
4917
    }
4918
    cur_pos = qemu_ftell(f);
4919
    qemu_fseek(f, total_len_pos, SEEK_SET);
4920
    qemu_put_be64(f, cur_pos - total_len_pos - 8);
4921
    qemu_fseek(f, cur_pos, SEEK_SET);
4922

    
4923
    ret = 0;
4924
    return ret;
4925
}
4926

    
4927
static SaveStateEntry *find_se(const char *idstr, int instance_id)
4928
{
4929
    SaveStateEntry *se;
4930

    
4931
    for(se = first_se; se != NULL; se = se->next) {
4932
        if (!strcmp(se->idstr, idstr) && 
4933
            instance_id == se->instance_id)
4934
            return se;
4935
    }
4936
    return NULL;
4937
}
4938

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

    
4991
/* device can contain snapshots */
4992
static int bdrv_can_snapshot(BlockDriverState *bs)
4993
{
4994
    return (bs &&
4995
            !bdrv_is_removable(bs) &&
4996
            !bdrv_is_read_only(bs));
4997
}
4998

    
4999
/* device must be snapshots in order to have a reliable snapshot */
5000
static int bdrv_has_snapshot(BlockDriverState *bs)
5001
{
5002
    return (bs &&
5003
            !bdrv_is_removable(bs) &&
5004
            !bdrv_is_read_only(bs));
5005
}
5006

    
5007
static BlockDriverState *get_bs_snapshots(void)
5008
{
5009
    BlockDriverState *bs;
5010
    int i;
5011

    
5012
    if (bs_snapshots)
5013
        return bs_snapshots;
5014
    for(i = 0; i <= MAX_DISKS; i++) {
5015
        bs = bs_table[i];
5016
        if (bdrv_can_snapshot(bs))
5017
            goto ok;
5018
    }
5019
    return NULL;
5020
 ok:
5021
    bs_snapshots = bs;
5022
    return bs;
5023
}
5024

    
5025
static int bdrv_snapshot_find(BlockDriverState *bs, QEMUSnapshotInfo *sn_info,
5026
                              const char *name)
5027
{
5028
    QEMUSnapshotInfo *sn_tab, *sn;
5029
    int nb_sns, i, ret;
5030
    
5031
    ret = -ENOENT;
5032
    nb_sns = bdrv_snapshot_list(bs, &sn_tab);
5033
    if (nb_sns < 0)
5034
        return ret;
5035
    for(i = 0; i < nb_sns; i++) {
5036
        sn = &sn_tab[i];
5037
        if (!strcmp(sn->id_str, name) || !strcmp(sn->name, name)) {
5038
            *sn_info = *sn;
5039
            ret = 0;
5040
            break;
5041
        }
5042
    }
5043
    qemu_free(sn_tab);
5044
    return ret;
5045
}
5046

    
5047
void do_savevm(const char *name)
5048
{
5049
    BlockDriverState *bs, *bs1;
5050
    QEMUSnapshotInfo sn1, *sn = &sn1, old_sn1, *old_sn = &old_sn1;
5051
    int must_delete, ret, i;
5052
    BlockDriverInfo bdi1, *bdi = &bdi1;
5053
    QEMUFile *f;
5054
    int saved_vm_running;
5055
#ifdef _WIN32
5056
    struct _timeb tb;
5057
#else
5058
    struct timeval tv;
5059
#endif
5060

    
5061
    bs = get_bs_snapshots();
5062
    if (!bs) {
5063
        term_printf("No block device can accept snapshots\n");
5064
        return;
5065
    }
5066

    
5067
    /* ??? Should this occur after vm_stop?  */
5068
    qemu_aio_flush();
5069

    
5070
    saved_vm_running = vm_running;
5071
    vm_stop(0);
5072
    
5073
    must_delete = 0;
5074
    if (name) {
5075
        ret = bdrv_snapshot_find(bs, old_sn, name);
5076
        if (ret >= 0) {
5077
            must_delete = 1;
5078
        }
5079
    }
5080
    memset(sn, 0, sizeof(*sn));
5081
    if (must_delete) {
5082
        pstrcpy(sn->name, sizeof(sn->name), old_sn->name);
5083
        pstrcpy(sn->id_str, sizeof(sn->id_str), old_sn->id_str);
5084
    } else {
5085
        if (name)
5086
            pstrcpy(sn->name, sizeof(sn->name), name);
5087
    }
5088

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

    
5123
    for(i = 0; i < MAX_DISKS; i++) {
5124
        bs1 = bs_table[i];
5125
        if (bdrv_has_snapshot(bs1)) {
5126
            if (must_delete) {
5127
                ret = bdrv_snapshot_delete(bs1, old_sn->id_str);
5128
                if (ret < 0) {
5129
                    term_printf("Error while deleting snapshot on '%s'\n",
5130
                                bdrv_get_device_name(bs1));
5131
                }
5132
            }
5133
            ret = bdrv_snapshot_create(bs1, sn);
5134
            if (ret < 0) {
5135
                term_printf("Error while creating snapshot on '%s'\n",
5136
                            bdrv_get_device_name(bs1));
5137
            }
5138
        }
5139
    }
5140

    
5141
 the_end:
5142
    if (saved_vm_running)
5143
        vm_start();
5144
}
5145

    
5146
void do_loadvm(const char *name)
5147
{
5148
    BlockDriverState *bs, *bs1;
5149
    BlockDriverInfo bdi1, *bdi = &bdi1;
5150
    QEMUFile *f;
5151
    int i, ret;
5152
    int saved_vm_running;
5153

    
5154
    bs = get_bs_snapshots();
5155
    if (!bs) {
5156
        term_printf("No block device supports snapshots\n");
5157
        return;
5158
    }
5159
    
5160
    /* Flush all IO requests so they don't interfere with the new state.  */
5161
    qemu_aio_flush();
5162

    
5163
    saved_vm_running = vm_running;
5164
    vm_stop(0);
5165

    
5166
    for(i = 0; i <= MAX_DISKS; i++) {
5167
        bs1 = bs_table[i];
5168
        if (bdrv_has_snapshot(bs1)) {
5169
            ret = bdrv_snapshot_goto(bs1, name);
5170
            if (ret < 0) {
5171
                if (bs != bs1)
5172
                    term_printf("Warning: ");
5173
                switch(ret) {
5174
                case -ENOTSUP:
5175
                    term_printf("Snapshots not supported on device '%s'\n",
5176
                                bdrv_get_device_name(bs1));
5177
                    break;
5178
                case -ENOENT:
5179
                    term_printf("Could not find snapshot '%s' on device '%s'\n",
5180
                                name, bdrv_get_device_name(bs1));
5181
                    break;
5182
                default:
5183
                    term_printf("Error %d while activating snapshot on '%s'\n",
5184
                                ret, bdrv_get_device_name(bs1));
5185
                    break;
5186
                }
5187
                /* fatal on snapshot block device */
5188
                if (bs == bs1)
5189
                    goto the_end;
5190
            }
5191
        }
5192
    }
5193

    
5194
    if (bdrv_get_info(bs, bdi) < 0 || bdi->vm_state_offset <= 0) {
5195
        term_printf("Device %s does not support VM state snapshots\n",
5196
                    bdrv_get_device_name(bs));
5197
        return;
5198
    }
5199
    
5200
    /* restore the VM state */
5201
    f = qemu_fopen_bdrv(bs, bdi->vm_state_offset, 0);
5202
    if (!f) {
5203
        term_printf("Could not open VM state file\n");
5204
        goto the_end;
5205
    }
5206
    ret = qemu_loadvm_state(f);
5207
    qemu_fclose(f);
5208
    if (ret < 0) {
5209
        term_printf("Error %d while loading VM state\n", ret);
5210
    }
5211
 the_end:
5212
    if (saved_vm_running)
5213
        vm_start();
5214
}
5215

    
5216
void do_delvm(const char *name)
5217
{
5218
    BlockDriverState *bs, *bs1;
5219
    int i, ret;
5220

    
5221
    bs = get_bs_snapshots();
5222
    if (!bs) {
5223
        term_printf("No block device supports snapshots\n");
5224
        return;
5225
    }
5226
    
5227
    for(i = 0; i <= MAX_DISKS; i++) {
5228
        bs1 = bs_table[i];
5229
        if (bdrv_has_snapshot(bs1)) {
5230
            ret = bdrv_snapshot_delete(bs1, name);
5231
            if (ret < 0) {
5232
                if (ret == -ENOTSUP)
5233
                    term_printf("Snapshots not supported on device '%s'\n",
5234
                                bdrv_get_device_name(bs1));
5235
                else
5236
                    term_printf("Error %d while deleting snapshot on '%s'\n",
5237
                                ret, bdrv_get_device_name(bs1));
5238
            }
5239
        }
5240
    }
5241
}
5242

    
5243
void do_info_snapshots(void)
5244
{
5245
    BlockDriverState *bs, *bs1;
5246
    QEMUSnapshotInfo *sn_tab, *sn;
5247
    int nb_sns, i;
5248
    char buf[256];
5249

    
5250
    bs = get_bs_snapshots();
5251
    if (!bs) {
5252
        term_printf("No available block device supports snapshots\n");
5253
        return;
5254
    }
5255
    term_printf("Snapshot devices:");
5256
    for(i = 0; i <= MAX_DISKS; i++) {
5257
        bs1 = bs_table[i];
5258
        if (bdrv_has_snapshot(bs1)) {
5259
            if (bs == bs1)
5260
                term_printf(" %s", bdrv_get_device_name(bs1));
5261
        }
5262
    }
5263
    term_printf("\n");
5264

    
5265
    nb_sns = bdrv_snapshot_list(bs, &sn_tab);
5266
    if (nb_sns < 0) {
5267
        term_printf("bdrv_snapshot_list: error %d\n", nb_sns);
5268
        return;
5269
    }
5270
    term_printf("Snapshot list (from %s):\n", bdrv_get_device_name(bs));
5271
    term_printf("%s\n", bdrv_snapshot_dump(buf, sizeof(buf), NULL));
5272
    for(i = 0; i < nb_sns; i++) {
5273
        sn = &sn_tab[i];
5274
        term_printf("%s\n", bdrv_snapshot_dump(buf, sizeof(buf), sn));
5275
    }
5276
    qemu_free(sn_tab);
5277
}
5278

    
5279
/***********************************************************/
5280
/* cpu save/restore */
5281

    
5282
#if defined(TARGET_I386)
5283

    
5284
static void cpu_put_seg(QEMUFile *f, SegmentCache *dt)
5285
{
5286
    qemu_put_be32(f, dt->selector);
5287
    qemu_put_betl(f, dt->base);
5288
    qemu_put_be32(f, dt->limit);
5289
    qemu_put_be32(f, dt->flags);
5290
}
5291

    
5292
static void cpu_get_seg(QEMUFile *f, SegmentCache *dt)
5293
{
5294
    dt->selector = qemu_get_be32(f);
5295
    dt->base = qemu_get_betl(f);
5296
    dt->limit = qemu_get_be32(f);
5297
    dt->flags = qemu_get_be32(f);
5298
}
5299

    
5300
void cpu_save(QEMUFile *f, void *opaque)
5301
{
5302
    CPUState *env = opaque;
5303
    uint16_t fptag, fpus, fpuc, fpregs_format;
5304
    uint32_t hflags;
5305
    int i;
5306
    
5307
    for(i = 0; i < CPU_NB_REGS; i++)
5308
        qemu_put_betls(f, &env->regs[i]);
5309
    qemu_put_betls(f, &env->eip);
5310
    qemu_put_betls(f, &env->eflags);
5311
    hflags = env->hflags; /* XXX: suppress most of the redundant hflags */
5312
    qemu_put_be32s(f, &hflags);
5313
    
5314
    /* FPU */
5315
    fpuc = env->fpuc;
5316
    fpus = (env->fpus & ~0x3800) | (env->fpstt & 0x7) << 11;
5317
    fptag = 0;
5318
    for(i = 0; i < 8; i++) {
5319
        fptag |= ((!env->fptags[i]) << i);
5320
    }
5321
    
5322
    qemu_put_be16s(f, &fpuc);
5323
    qemu_put_be16s(f, &fpus);
5324
    qemu_put_be16s(f, &fptag);
5325

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

    
5353
    for(i = 0; i < 6; i++)
5354
        cpu_put_seg(f, &env->segs[i]);
5355
    cpu_put_seg(f, &env->ldt);
5356
    cpu_put_seg(f, &env->tr);
5357
    cpu_put_seg(f, &env->gdt);
5358
    cpu_put_seg(f, &env->idt);
5359
    
5360
    qemu_put_be32s(f, &env->sysenter_cs);
5361
    qemu_put_be32s(f, &env->sysenter_esp);
5362
    qemu_put_be32s(f, &env->sysenter_eip);
5363
    
5364
    qemu_put_betls(f, &env->cr[0]);
5365
    qemu_put_betls(f, &env->cr[2]);
5366
    qemu_put_betls(f, &env->cr[3]);
5367
    qemu_put_betls(f, &env->cr[4]);
5368
    
5369
    for(i = 0; i < 8; i++)
5370
        qemu_put_betls(f, &env->dr[i]);
5371

    
5372
    /* MMU */
5373
    qemu_put_be32s(f, &env->a20_mask);
5374

    
5375
    /* XMM */
5376
    qemu_put_be32s(f, &env->mxcsr);
5377
    for(i = 0; i < CPU_NB_REGS; i++) {
5378
        qemu_put_be64s(f, &env->xmm_regs[i].XMM_Q(0));
5379
        qemu_put_be64s(f, &env->xmm_regs[i].XMM_Q(1));
5380
    }
5381

    
5382
#ifdef TARGET_X86_64
5383
    qemu_put_be64s(f, &env->efer);
5384
    qemu_put_be64s(f, &env->star);
5385
    qemu_put_be64s(f, &env->lstar);
5386
    qemu_put_be64s(f, &env->cstar);
5387
    qemu_put_be64s(f, &env->fmask);
5388
    qemu_put_be64s(f, &env->kernelgsbase);
5389
#endif
5390
    qemu_put_be32s(f, &env->smbase);
5391
}
5392

    
5393
#ifdef USE_X86LDOUBLE
5394
/* XXX: add that in a FPU generic layer */
5395
union x86_longdouble {
5396
    uint64_t mant;
5397
    uint16_t exp;
5398
};
5399

    
5400
#define MANTD1(fp)        (fp & ((1LL << 52) - 1))
5401
#define EXPBIAS1 1023
5402
#define EXPD1(fp)        ((fp >> 52) & 0x7FF)
5403
#define SIGND1(fp)        ((fp >> 32) & 0x80000000)
5404

    
5405
static void fp64_to_fp80(union x86_longdouble *p, uint64_t temp)
5406
{
5407
    int e;
5408
    /* mantissa */
5409
    p->mant = (MANTD1(temp) << 11) | (1LL << 63);
5410
    /* exponent + sign */
5411
    e = EXPD1(temp) - EXPBIAS1 + 16383;
5412
    e |= SIGND1(temp) >> 16;
5413
    p->exp = e;
5414
}
5415
#endif
5416

    
5417
int cpu_load(QEMUFile *f, void *opaque, int version_id)
5418
{
5419
    CPUState *env = opaque;
5420
    int i, guess_mmx;
5421
    uint32_t hflags;
5422
    uint16_t fpus, fpuc, fptag, fpregs_format;
5423

    
5424
    if (version_id != 3 && version_id != 4)
5425
        return -EINVAL;
5426
    for(i = 0; i < CPU_NB_REGS; i++)
5427
        qemu_get_betls(f, &env->regs[i]);
5428
    qemu_get_betls(f, &env->eip);
5429
    qemu_get_betls(f, &env->eflags);
5430
    qemu_get_be32s(f, &hflags);
5431

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

    
5482
    env->fpuc = fpuc;
5483
    /* XXX: restore FPU round state */
5484
    env->fpstt = (fpus >> 11) & 7;
5485
    env->fpus = fpus & ~0x3800;
5486
    fptag ^= 0xff;
5487
    for(i = 0; i < 8; i++) {
5488
        env->fptags[i] = (fptag >> i) & 1;
5489
    }
5490
    
5491
    for(i = 0; i < 6; i++)
5492
        cpu_get_seg(f, &env->segs[i]);
5493
    cpu_get_seg(f, &env->ldt);
5494
    cpu_get_seg(f, &env->tr);
5495
    cpu_get_seg(f, &env->gdt);
5496
    cpu_get_seg(f, &env->idt);
5497
    
5498
    qemu_get_be32s(f, &env->sysenter_cs);
5499
    qemu_get_be32s(f, &env->sysenter_esp);
5500
    qemu_get_be32s(f, &env->sysenter_eip);
5501
    
5502
    qemu_get_betls(f, &env->cr[0]);
5503
    qemu_get_betls(f, &env->cr[2]);
5504
    qemu_get_betls(f, &env->cr[3]);
5505
    qemu_get_betls(f, &env->cr[4]);
5506
    
5507
    for(i = 0; i < 8; i++)
5508
        qemu_get_betls(f, &env->dr[i]);
5509

    
5510
    /* MMU */
5511
    qemu_get_be32s(f, &env->a20_mask);
5512

    
5513
    qemu_get_be32s(f, &env->mxcsr);
5514
    for(i = 0; i < CPU_NB_REGS; i++) {
5515
        qemu_get_be64s(f, &env->xmm_regs[i].XMM_Q(0));
5516
        qemu_get_be64s(f, &env->xmm_regs[i].XMM_Q(1));
5517
    }
5518

    
5519
#ifdef TARGET_X86_64
5520
    qemu_get_be64s(f, &env->efer);
5521
    qemu_get_be64s(f, &env->star);
5522
    qemu_get_be64s(f, &env->lstar);
5523
    qemu_get_be64s(f, &env->cstar);
5524
    qemu_get_be64s(f, &env->fmask);
5525
    qemu_get_be64s(f, &env->kernelgsbase);
5526
#endif
5527
    if (version_id >= 4) 
5528
        qemu_get_be32s(f, &env->smbase);
5529

    
5530
    /* XXX: compute hflags from scratch, except for CPL and IIF */
5531
    env->hflags = hflags;
5532
    tlb_flush(env, 1);
5533
    return 0;
5534
}
5535

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

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

    
5546
#elif defined(TARGET_MIPS)
5547
void cpu_save(QEMUFile *f, void *opaque)
5548
{
5549
}
5550

    
5551
int cpu_load(QEMUFile *f, void *opaque, int version_id)
5552
{
5553
    return 0;
5554
}
5555

    
5556
#elif defined(TARGET_SPARC)
5557
void cpu_save(QEMUFile *f, void *opaque)
5558
{
5559
    CPUState *env = opaque;
5560
    int i;
5561
    uint32_t tmp;
5562

    
5563
    for(i = 0; i < 8; i++)
5564
        qemu_put_betls(f, &env->gregs[i]);
5565
    for(i = 0; i < NWINDOWS * 16; i++)
5566
        qemu_put_betls(f, &env->regbase[i]);
5567

    
5568
    /* FPU */
5569
    for(i = 0; i < TARGET_FPREGS; i++) {
5570
        union {
5571
            float32 f;
5572
            uint32_t i;
5573
        } u;
5574
        u.f = env->fpr[i];
5575
        qemu_put_be32(f, u.i);
5576
    }
5577

    
5578
    qemu_put_betls(f, &env->pc);
5579
    qemu_put_betls(f, &env->npc);
5580
    qemu_put_betls(f, &env->y);
5581
    tmp = GET_PSR(env);
5582
    qemu_put_be32(f, tmp);
5583
    qemu_put_betls(f, &env->fsr);
5584
    qemu_put_betls(f, &env->tbr);
5585
#ifndef TARGET_SPARC64
5586
    qemu_put_be32s(f, &env->wim);
5587
    /* MMU */
5588
    for(i = 0; i < 16; i++)
5589
        qemu_put_be32s(f, &env->mmuregs[i]);
5590
#endif
5591
}
5592

    
5593
int cpu_load(QEMUFile *f, void *opaque, int version_id)
5594
{
5595
    CPUState *env = opaque;
5596
    int i;
5597
    uint32_t tmp;
5598

    
5599
    for(i = 0; i < 8; i++)
5600
        qemu_get_betls(f, &env->gregs[i]);
5601
    for(i = 0; i < NWINDOWS * 16; i++)
5602
        qemu_get_betls(f, &env->regbase[i]);
5603

    
5604
    /* FPU */
5605
    for(i = 0; i < TARGET_FPREGS; i++) {
5606
        union {
5607
            float32 f;
5608
            uint32_t i;
5609
        } u;
5610
        u.i = qemu_get_be32(f);
5611
        env->fpr[i] = u.f;
5612
    }
5613

    
5614
    qemu_get_betls(f, &env->pc);
5615
    qemu_get_betls(f, &env->npc);
5616
    qemu_get_betls(f, &env->y);
5617
    tmp = qemu_get_be32(f);
5618
    env->cwp = 0; /* needed to ensure that the wrapping registers are
5619
                     correctly updated */
5620
    PUT_PSR(env, tmp);
5621
    qemu_get_betls(f, &env->fsr);
5622
    qemu_get_betls(f, &env->tbr);
5623
#ifndef TARGET_SPARC64
5624
    qemu_get_be32s(f, &env->wim);
5625
    /* MMU */
5626
    for(i = 0; i < 16; i++)
5627
        qemu_get_be32s(f, &env->mmuregs[i]);
5628
#endif
5629
    tlb_flush(env, 1);
5630
    return 0;
5631
}
5632

    
5633
#elif defined(TARGET_ARM)
5634

    
5635
/* ??? Need to implement these.  */
5636
void cpu_save(QEMUFile *f, void *opaque)
5637
{
5638
}
5639

    
5640
int cpu_load(QEMUFile *f, void *opaque, int version_id)
5641
{
5642
    return 0;
5643
}
5644

    
5645
#else
5646

    
5647
#warning No CPU save/restore functions
5648

    
5649
#endif
5650

    
5651
/***********************************************************/
5652
/* ram save/restore */
5653

    
5654
static int ram_get_page(QEMUFile *f, uint8_t *buf, int len)
5655
{
5656
    int v;
5657

    
5658
    v = qemu_get_byte(f);
5659
    switch(v) {
5660
    case 0:
5661
        if (qemu_get_buffer(f, buf, len) != len)
5662
            return -EIO;
5663
        break;
5664
    case 1:
5665
        v = qemu_get_byte(f);
5666
        memset(buf, v, len);
5667
        break;
5668
    default:
5669
        return -EINVAL;
5670
    }
5671
    return 0;
5672
}
5673

    
5674
static int ram_load_v1(QEMUFile *f, void *opaque)
5675
{
5676
    int i, ret;
5677

    
5678
    if (qemu_get_be32(f) != phys_ram_size)
5679
        return -EINVAL;
5680
    for(i = 0; i < phys_ram_size; i+= TARGET_PAGE_SIZE) {
5681
        ret = ram_get_page(f, phys_ram_base + i, TARGET_PAGE_SIZE);
5682
        if (ret)
5683
            return ret;
5684
    }
5685
    return 0;
5686
}
5687

    
5688
#define BDRV_HASH_BLOCK_SIZE 1024
5689
#define IOBUF_SIZE 4096
5690
#define RAM_CBLOCK_MAGIC 0xfabe
5691

    
5692
typedef struct RamCompressState {
5693
    z_stream zstream;
5694
    QEMUFile *f;
5695
    uint8_t buf[IOBUF_SIZE];
5696
} RamCompressState;
5697

    
5698
static int ram_compress_open(RamCompressState *s, QEMUFile *f)
5699
{
5700
    int ret;
5701
    memset(s, 0, sizeof(*s));
5702
    s->f = f;
5703
    ret = deflateInit2(&s->zstream, 1,
5704
                       Z_DEFLATED, 15, 
5705
                       9, Z_DEFAULT_STRATEGY);
5706
    if (ret != Z_OK)
5707
        return -1;
5708
    s->zstream.avail_out = IOBUF_SIZE;
5709
    s->zstream.next_out = s->buf;
5710
    return 0;
5711
}
5712

    
5713
static void ram_put_cblock(RamCompressState *s, const uint8_t *buf, int len)
5714
{
5715
    qemu_put_be16(s->f, RAM_CBLOCK_MAGIC);
5716
    qemu_put_be16(s->f, len);
5717
    qemu_put_buffer(s->f, buf, len);
5718
}
5719

    
5720
static int ram_compress_buf(RamCompressState *s, const uint8_t *buf, int len)
5721
{
5722
    int ret;
5723

    
5724
    s->zstream.avail_in = len;
5725
    s->zstream.next_in = (uint8_t *)buf;
5726
    while (s->zstream.avail_in > 0) {
5727
        ret = deflate(&s->zstream, Z_NO_FLUSH);
5728
        if (ret != Z_OK)
5729
            return -1;
5730
        if (s->zstream.avail_out == 0) {
5731
            ram_put_cblock(s, s->buf, IOBUF_SIZE);
5732
            s->zstream.avail_out = IOBUF_SIZE;
5733
            s->zstream.next_out = s->buf;
5734
        }
5735
    }
5736
    return 0;
5737
}
5738

    
5739
static void ram_compress_close(RamCompressState *s)
5740
{
5741
    int len, ret;
5742

    
5743
    /* compress last bytes */
5744
    for(;;) {
5745
        ret = deflate(&s->zstream, Z_FINISH);
5746
        if (ret == Z_OK || ret == Z_STREAM_END) {
5747
            len = IOBUF_SIZE - s->zstream.avail_out;
5748
            if (len > 0) {
5749
                ram_put_cblock(s, s->buf, len);
5750
            }
5751
            s->zstream.avail_out = IOBUF_SIZE;
5752
            s->zstream.next_out = s->buf;
5753
            if (ret == Z_STREAM_END)
5754
                break;
5755
        } else {
5756
            goto fail;
5757
        }
5758
    }
5759
fail:
5760
    deflateEnd(&s->zstream);
5761
}
5762

    
5763
typedef struct RamDecompressState {
5764
    z_stream zstream;
5765
    QEMUFile *f;
5766
    uint8_t buf[IOBUF_SIZE];
5767
} RamDecompressState;
5768

    
5769
static int ram_decompress_open(RamDecompressState *s, QEMUFile *f)
5770
{
5771
    int ret;
5772
    memset(s, 0, sizeof(*s));
5773
    s->f = f;
5774
    ret = inflateInit(&s->zstream);
5775
    if (ret != Z_OK)
5776
        return -1;
5777
    return 0;
5778
}
5779

    
5780
static int ram_decompress_buf(RamDecompressState *s, uint8_t *buf, int len)
5781
{
5782
    int ret, clen;
5783

    
5784
    s->zstream.avail_out = len;
5785
    s->zstream.next_out = buf;
5786
    while (s->zstream.avail_out > 0) {
5787
        if (s->zstream.avail_in == 0) {
5788
            if (qemu_get_be16(s->f) != RAM_CBLOCK_MAGIC)
5789
                return -1;
5790
            clen = qemu_get_be16(s->f);
5791
            if (clen > IOBUF_SIZE)
5792
                return -1;
5793
            qemu_get_buffer(s->f, s->buf, clen);
5794
            s->zstream.avail_in = clen;
5795
            s->zstream.next_in = s->buf;
5796
        }
5797
        ret = inflate(&s->zstream, Z_PARTIAL_FLUSH);
5798
        if (ret != Z_OK && ret != Z_STREAM_END) {
5799
            return -1;
5800
        }
5801
    }
5802
    return 0;
5803
}
5804

    
5805
static void ram_decompress_close(RamDecompressState *s)
5806
{
5807
    inflateEnd(&s->zstream);
5808
}
5809

    
5810
static void ram_save(QEMUFile *f, void *opaque)
5811
{
5812
    int i;
5813
    RamCompressState s1, *s = &s1;
5814
    uint8_t buf[10];
5815
    
5816
    qemu_put_be32(f, phys_ram_size);
5817
    if (ram_compress_open(s, f) < 0)
5818
        return;
5819
    for(i = 0; i < phys_ram_size; i+= BDRV_HASH_BLOCK_SIZE) {
5820
#if 0
5821
        if (tight_savevm_enabled) {
5822
            int64_t sector_num;
5823
            int j;
5824

5825
            /* find if the memory block is available on a virtual
5826
               block device */
5827
            sector_num = -1;
5828
            for(j = 0; j < MAX_DISKS; j++) {
5829
                if (bs_table[j]) {
5830
                    sector_num = bdrv_hash_find(bs_table[j], 
5831
                                                phys_ram_base + i, BDRV_HASH_BLOCK_SIZE);
5832
                    if (sector_num >= 0)
5833
                        break;
5834
                }
5835
            }
5836
            if (j == MAX_DISKS)
5837
                goto normal_compress;
5838
            buf[0] = 1;
5839
            buf[1] = j;
5840
            cpu_to_be64wu((uint64_t *)(buf + 2), sector_num);
5841
            ram_compress_buf(s, buf, 10);
5842
        } else 
5843
#endif
5844
        {
5845
            //        normal_compress:
5846
            buf[0] = 0;
5847
            ram_compress_buf(s, buf, 1);
5848
            ram_compress_buf(s, phys_ram_base + i, BDRV_HASH_BLOCK_SIZE);
5849
        }
5850
    }
5851
    ram_compress_close(s);
5852
}
5853

    
5854
static int ram_load(QEMUFile *f, void *opaque, int version_id)
5855
{
5856
    RamDecompressState s1, *s = &s1;
5857
    uint8_t buf[10];
5858
    int i;
5859

    
5860
    if (version_id == 1)
5861
        return ram_load_v1(f, opaque);
5862
    if (version_id != 2)
5863
        return -EINVAL;
5864
    if (qemu_get_be32(f) != phys_ram_size)
5865
        return -EINVAL;
5866
    if (ram_decompress_open(s, f) < 0)
5867
        return -EINVAL;
5868
    for(i = 0; i < phys_ram_size; i+= BDRV_HASH_BLOCK_SIZE) {
5869
        if (ram_decompress_buf(s, buf, 1) < 0) {
5870
            fprintf(stderr, "Error while reading ram block header\n");
5871
            goto error;
5872
        }
5873
        if (buf[0] == 0) {
5874
            if (ram_decompress_buf(s, phys_ram_base + i, BDRV_HASH_BLOCK_SIZE) < 0) {
5875
                fprintf(stderr, "Error while reading ram block address=0x%08x", i);
5876
                goto error;
5877
            }
5878
        } else 
5879
#if 0
5880
        if (buf[0] == 1) {
5881
            int bs_index;
5882
            int64_t sector_num;
5883

5884
            ram_decompress_buf(s, buf + 1, 9);
5885
            bs_index = buf[1];
5886
            sector_num = be64_to_cpupu((const uint64_t *)(buf + 2));
5887
            if (bs_index >= MAX_DISKS || bs_table[bs_index] == NULL) {
5888
                fprintf(stderr, "Invalid block device index %d\n", bs_index);
5889
                goto error;
5890
            }
5891
            if (bdrv_read(bs_table[bs_index], sector_num, phys_ram_base + i, 
5892
                          BDRV_HASH_BLOCK_SIZE / 512) < 0) {
5893
                fprintf(stderr, "Error while reading sector %d:%" PRId64 "\n", 
5894
                        bs_index, sector_num);
5895
                goto error;
5896
            }
5897
        } else 
5898
#endif
5899
        {
5900
        error:
5901
            printf("Error block header\n");
5902
            return -EINVAL;
5903
        }
5904
    }
5905
    ram_decompress_close(s);
5906
    return 0;
5907
}
5908

    
5909
/***********************************************************/
5910
/* bottom halves (can be seen as timers which expire ASAP) */
5911

    
5912
struct QEMUBH {
5913
    QEMUBHFunc *cb;
5914
    void *opaque;
5915
    int scheduled;
5916
    QEMUBH *next;
5917
};
5918

    
5919
static QEMUBH *first_bh = NULL;
5920

    
5921
QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque)
5922
{
5923
    QEMUBH *bh;
5924
    bh = qemu_mallocz(sizeof(QEMUBH));
5925
    if (!bh)
5926
        return NULL;
5927
    bh->cb = cb;
5928
    bh->opaque = opaque;
5929
    return bh;
5930
}
5931

    
5932
int qemu_bh_poll(void)
5933
{
5934
    QEMUBH *bh, **pbh;
5935
    int ret;
5936

    
5937
    ret = 0;
5938
    for(;;) {
5939
        pbh = &first_bh;
5940
        bh = *pbh;
5941
        if (!bh)
5942
            break;
5943
        ret = 1;
5944
        *pbh = bh->next;
5945
        bh->scheduled = 0;
5946
        bh->cb(bh->opaque);
5947
    }
5948
    return ret;
5949
}
5950

    
5951
void qemu_bh_schedule(QEMUBH *bh)
5952
{
5953
    CPUState *env = cpu_single_env;
5954
    if (bh->scheduled)
5955
        return;
5956
    bh->scheduled = 1;
5957
    bh->next = first_bh;
5958
    first_bh = bh;
5959

    
5960
    /* stop the currently executing CPU to execute the BH ASAP */
5961
    if (env) {
5962
        cpu_interrupt(env, CPU_INTERRUPT_EXIT);
5963
    }
5964
}
5965

    
5966
void qemu_bh_cancel(QEMUBH *bh)
5967
{
5968
    QEMUBH **pbh;
5969
    if (bh->scheduled) {
5970
        pbh = &first_bh;
5971
        while (*pbh != bh)
5972
            pbh = &(*pbh)->next;
5973
        *pbh = bh->next;
5974
        bh->scheduled = 0;
5975
    }
5976
}
5977

    
5978
void qemu_bh_delete(QEMUBH *bh)
5979
{
5980
    qemu_bh_cancel(bh);
5981
    qemu_free(bh);
5982
}
5983

    
5984
/***********************************************************/
5985
/* machine registration */
5986

    
5987
QEMUMachine *first_machine = NULL;
5988

    
5989
int qemu_register_machine(QEMUMachine *m)
5990
{
5991
    QEMUMachine **pm;
5992
    pm = &first_machine;
5993
    while (*pm != NULL)
5994
        pm = &(*pm)->next;
5995
    m->next = NULL;
5996
    *pm = m;
5997
    return 0;
5998
}
5999

    
6000
QEMUMachine *find_machine(const char *name)
6001
{
6002
    QEMUMachine *m;
6003

    
6004
    for(m = first_machine; m != NULL; m = m->next) {
6005
        if (!strcmp(m->name, name))
6006
            return m;
6007
    }
6008
    return NULL;
6009
}
6010

    
6011
/***********************************************************/
6012
/* main execution loop */
6013

    
6014
void gui_update(void *opaque)
6015
{
6016
    display_state.dpy_refresh(&display_state);
6017
    qemu_mod_timer(gui_timer, GUI_REFRESH_INTERVAL + qemu_get_clock(rt_clock));
6018
}
6019

    
6020
struct vm_change_state_entry {
6021
    VMChangeStateHandler *cb;
6022
    void *opaque;
6023
    LIST_ENTRY (vm_change_state_entry) entries;
6024
};
6025

    
6026
static LIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
6027

    
6028
VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
6029
                                                     void *opaque)
6030
{
6031
    VMChangeStateEntry *e;
6032

    
6033
    e = qemu_mallocz(sizeof (*e));
6034
    if (!e)
6035
        return NULL;
6036

    
6037
    e->cb = cb;
6038
    e->opaque = opaque;
6039
    LIST_INSERT_HEAD(&vm_change_state_head, e, entries);
6040
    return e;
6041
}
6042

    
6043
void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
6044
{
6045
    LIST_REMOVE (e, entries);
6046
    qemu_free (e);
6047
}
6048

    
6049
static void vm_state_notify(int running)
6050
{
6051
    VMChangeStateEntry *e;
6052

    
6053
    for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) {
6054
        e->cb(e->opaque, running);
6055
    }
6056
}
6057

    
6058
/* XXX: support several handlers */
6059
static VMStopHandler *vm_stop_cb;
6060
static void *vm_stop_opaque;
6061

    
6062
int qemu_add_vm_stop_handler(VMStopHandler *cb, void *opaque)
6063
{
6064
    vm_stop_cb = cb;
6065
    vm_stop_opaque = opaque;
6066
    return 0;
6067
}
6068

    
6069
void qemu_del_vm_stop_handler(VMStopHandler *cb, void *opaque)
6070
{
6071
    vm_stop_cb = NULL;
6072
}
6073

    
6074
void vm_start(void)
6075
{
6076
    if (!vm_running) {
6077
        cpu_enable_ticks();
6078
        vm_running = 1;
6079
        vm_state_notify(1);
6080
    }
6081
}
6082

    
6083
void vm_stop(int reason) 
6084
{
6085
    if (vm_running) {
6086
        cpu_disable_ticks();
6087
        vm_running = 0;
6088
        if (reason != 0) {
6089
            if (vm_stop_cb) {
6090
                vm_stop_cb(vm_stop_opaque, reason);
6091
            }
6092
        }
6093
        vm_state_notify(0);
6094
    }
6095
}
6096

    
6097
/* reset/shutdown handler */
6098

    
6099
typedef struct QEMUResetEntry {
6100
    QEMUResetHandler *func;
6101
    void *opaque;
6102
    struct QEMUResetEntry *next;
6103
} QEMUResetEntry;
6104

    
6105
static QEMUResetEntry *first_reset_entry;
6106
static int reset_requested;
6107
static int shutdown_requested;
6108
static int powerdown_requested;
6109

    
6110
void qemu_register_reset(QEMUResetHandler *func, void *opaque)
6111
{
6112
    QEMUResetEntry **pre, *re;
6113

    
6114
    pre = &first_reset_entry;
6115
    while (*pre != NULL)
6116
        pre = &(*pre)->next;
6117
    re = qemu_mallocz(sizeof(QEMUResetEntry));
6118
    re->func = func;
6119
    re->opaque = opaque;
6120
    re->next = NULL;
6121
    *pre = re;
6122
}
6123

    
6124
static void qemu_system_reset(void)
6125
{
6126
    QEMUResetEntry *re;
6127

    
6128
    /* reset all devices */
6129
    for(re = first_reset_entry; re != NULL; re = re->next) {
6130
        re->func(re->opaque);
6131
    }
6132
}
6133

    
6134
void qemu_system_reset_request(void)
6135
{
6136
    if (no_reboot) {
6137
        shutdown_requested = 1;
6138
    } else {
6139
        reset_requested = 1;
6140
    }
6141
    if (cpu_single_env)
6142
        cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
6143
}
6144

    
6145
void qemu_system_shutdown_request(void)
6146
{
6147
    shutdown_requested = 1;
6148
    if (cpu_single_env)
6149
        cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
6150
}
6151

    
6152
void qemu_system_powerdown_request(void)
6153
{
6154
    powerdown_requested = 1;
6155
    if (cpu_single_env)
6156
        cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
6157
}
6158

    
6159
void main_loop_wait(int timeout)
6160
{
6161
    IOHandlerRecord *ioh;
6162
    fd_set rfds, wfds, xfds;
6163
    int ret, nfds;
6164
    struct timeval tv;
6165
    PollingEntry *pe;
6166

    
6167

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

    
6227
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
6228
            if (ioh->deleted)
6229
                continue;
6230
            if (FD_ISSET(ioh->fd, &rfds)) {
6231
                ioh->fd_read(ioh->opaque);
6232
            }
6233
            if (FD_ISSET(ioh->fd, &wfds)) {
6234
                ioh->fd_write(ioh->opaque);
6235
            }
6236
        }
6237

    
6238
        /* remove deleted IO handlers */
6239
        pioh = &first_io_handler;
6240
        while (*pioh) {
6241
            ioh = *pioh;
6242
            if (ioh->deleted) {
6243
                *pioh = ioh->next;
6244
                qemu_free(ioh);
6245
            } else 
6246
                pioh = &ioh->next;
6247
        }
6248
    }
6249
#if defined(CONFIG_SLIRP)
6250
    if (slirp_inited) {
6251
        if (ret < 0) {
6252
            FD_ZERO(&rfds);
6253
            FD_ZERO(&wfds);
6254
            FD_ZERO(&xfds);
6255
        }
6256
        slirp_select_poll(&rfds, &wfds, &xfds);
6257
    }
6258
#endif
6259
    qemu_aio_poll();
6260
    qemu_bh_poll();
6261

    
6262
    if (vm_running) {
6263
        qemu_run_timers(&active_timers[QEMU_TIMER_VIRTUAL], 
6264
                        qemu_get_clock(vm_clock));
6265
        /* run dma transfers, if any */
6266
        DMA_run();
6267
    }
6268
    
6269
    /* real time timers */
6270
    qemu_run_timers(&active_timers[QEMU_TIMER_REALTIME], 
6271
                    qemu_get_clock(rt_clock));
6272
}
6273

    
6274
static CPUState *cur_cpu;
6275

    
6276
int main_loop(void)
6277
{
6278
    int ret, timeout;
6279
#ifdef CONFIG_PROFILER
6280
    int64_t ti;
6281
#endif
6282
    CPUState *env;
6283

    
6284
    cur_cpu = first_cpu;
6285
    for(;;) {
6286
        if (vm_running) {
6287

    
6288
            env = cur_cpu;
6289
            for(;;) {
6290
                /* get next cpu */
6291
                env = env->next_cpu;
6292
                if (!env)
6293
                    env = first_cpu;
6294
#ifdef CONFIG_PROFILER
6295
                ti = profile_getclock();
6296
#endif
6297
                ret = cpu_exec(env);
6298
#ifdef CONFIG_PROFILER
6299
                qemu_time += profile_getclock() - ti;
6300
#endif
6301
                if (ret == EXCP_HLT) {
6302
                    /* Give the next CPU a chance to run.  */
6303
                    cur_cpu = env;
6304
                    continue;
6305
                }
6306
                if (ret != EXCP_HALTED)
6307
                    break;
6308
                /* all CPUs are halted ? */
6309
                if (env == cur_cpu)
6310
                    break;
6311
            }
6312
            cur_cpu = env;
6313

    
6314
            if (shutdown_requested) {
6315
                ret = EXCP_INTERRUPT;
6316
                break;
6317
            }
6318
            if (reset_requested) {
6319
                reset_requested = 0;
6320
                qemu_system_reset();
6321
                ret = EXCP_INTERRUPT;
6322
            }
6323
            if (powerdown_requested) {
6324
                powerdown_requested = 0;
6325
                qemu_system_powerdown();
6326
                ret = EXCP_INTERRUPT;
6327
            }
6328
            if (ret == EXCP_DEBUG) {
6329
                vm_stop(EXCP_DEBUG);
6330
            }
6331
            /* If all cpus are halted then wait until the next IRQ */
6332
            /* XXX: use timeout computed from timers */
6333
            if (ret == EXCP_HALTED)
6334
                timeout = 10;
6335
            else
6336
                timeout = 0;
6337
        } else {
6338
            timeout = 10;
6339
        }
6340
#ifdef CONFIG_PROFILER
6341
        ti = profile_getclock();
6342
#endif
6343
        main_loop_wait(timeout);
6344
#ifdef CONFIG_PROFILER
6345
        dev_time += profile_getclock() - ti;
6346
#endif
6347
    }
6348
    cpu_disable_ticks();
6349
    return ret;
6350
}
6351

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

    
6489
#define HAS_ARG 0x0001
6490

    
6491
enum {
6492
    QEMU_OPTION_h,
6493

    
6494
    QEMU_OPTION_M,
6495
    QEMU_OPTION_cpu,
6496
    QEMU_OPTION_fda,
6497
    QEMU_OPTION_fdb,
6498
    QEMU_OPTION_hda,
6499
    QEMU_OPTION_hdb,
6500
    QEMU_OPTION_hdc,
6501
    QEMU_OPTION_hdd,
6502
    QEMU_OPTION_cdrom,
6503
    QEMU_OPTION_boot,
6504
    QEMU_OPTION_snapshot,
6505
#ifdef TARGET_I386
6506
    QEMU_OPTION_no_fd_bootchk,
6507
#endif
6508
    QEMU_OPTION_m,
6509
    QEMU_OPTION_nographic,
6510
#ifdef HAS_AUDIO
6511
    QEMU_OPTION_audio_help,
6512
    QEMU_OPTION_soundhw,
6513
#endif
6514

    
6515
    QEMU_OPTION_net,
6516
    QEMU_OPTION_tftp,
6517
    QEMU_OPTION_bootp,
6518
    QEMU_OPTION_smb,
6519
    QEMU_OPTION_redir,
6520

    
6521
    QEMU_OPTION_kernel,
6522
    QEMU_OPTION_append,
6523
    QEMU_OPTION_initrd,
6524

    
6525
    QEMU_OPTION_S,
6526
    QEMU_OPTION_s,
6527
    QEMU_OPTION_p,
6528
    QEMU_OPTION_d,
6529
    QEMU_OPTION_hdachs,
6530
    QEMU_OPTION_L,
6531
    QEMU_OPTION_no_code_copy,
6532
    QEMU_OPTION_k,
6533
    QEMU_OPTION_localtime,
6534
    QEMU_OPTION_cirrusvga,
6535
    QEMU_OPTION_g,
6536
    QEMU_OPTION_std_vga,
6537
    QEMU_OPTION_echr,
6538
    QEMU_OPTION_monitor,
6539
    QEMU_OPTION_serial,
6540
    QEMU_OPTION_parallel,
6541
    QEMU_OPTION_loadvm,
6542
    QEMU_OPTION_full_screen,
6543
    QEMU_OPTION_no_frame,
6544
    QEMU_OPTION_no_quit,
6545
    QEMU_OPTION_pidfile,
6546
    QEMU_OPTION_no_kqemu,
6547
    QEMU_OPTION_kernel_kqemu,
6548
    QEMU_OPTION_win2k_hack,
6549
    QEMU_OPTION_usb,
6550
    QEMU_OPTION_usbdevice,
6551
    QEMU_OPTION_smp,
6552
    QEMU_OPTION_vnc,
6553
    QEMU_OPTION_no_acpi,
6554
    QEMU_OPTION_no_reboot,
6555
    QEMU_OPTION_daemonize,
6556
    QEMU_OPTION_option_rom,
6557
    QEMU_OPTION_semihosting,
6558
    QEMU_OPTION_name,
6559
};
6560

    
6561
typedef struct QEMUOption {
6562
    const char *name;
6563
    int flags;
6564
    int index;
6565
} QEMUOption;
6566

    
6567
const QEMUOption qemu_options[] = {
6568
    { "h", 0, QEMU_OPTION_h },
6569
    { "help", 0, QEMU_OPTION_h },
6570

    
6571
    { "M", HAS_ARG, QEMU_OPTION_M },
6572
    { "cpu", HAS_ARG, QEMU_OPTION_cpu },
6573
    { "fda", HAS_ARG, QEMU_OPTION_fda },
6574
    { "fdb", HAS_ARG, QEMU_OPTION_fdb },
6575
    { "hda", HAS_ARG, QEMU_OPTION_hda },
6576
    { "hdb", HAS_ARG, QEMU_OPTION_hdb },
6577
    { "hdc", HAS_ARG, QEMU_OPTION_hdc },
6578
    { "hdd", HAS_ARG, QEMU_OPTION_hdd },
6579
    { "cdrom", HAS_ARG, QEMU_OPTION_cdrom },
6580
    { "boot", HAS_ARG, QEMU_OPTION_boot },
6581
    { "snapshot", 0, QEMU_OPTION_snapshot },
6582
#ifdef TARGET_I386
6583
    { "no-fd-bootchk", 0, QEMU_OPTION_no_fd_bootchk },
6584
#endif
6585
    { "m", HAS_ARG, QEMU_OPTION_m },
6586
    { "nographic", 0, QEMU_OPTION_nographic },
6587
    { "k", HAS_ARG, QEMU_OPTION_k },
6588
#ifdef HAS_AUDIO
6589
    { "audio-help", 0, QEMU_OPTION_audio_help },
6590
    { "soundhw", HAS_ARG, QEMU_OPTION_soundhw },
6591
#endif
6592

    
6593
    { "net", HAS_ARG, QEMU_OPTION_net},
6594
#ifdef CONFIG_SLIRP
6595
    { "tftp", HAS_ARG, QEMU_OPTION_tftp },
6596
    { "bootp", HAS_ARG, QEMU_OPTION_bootp },
6597
#ifndef _WIN32
6598
    { "smb", HAS_ARG, QEMU_OPTION_smb },
6599
#endif
6600
    { "redir", HAS_ARG, QEMU_OPTION_redir },
6601
#endif
6602

    
6603
    { "kernel", HAS_ARG, QEMU_OPTION_kernel },
6604
    { "append", HAS_ARG, QEMU_OPTION_append },
6605
    { "initrd", HAS_ARG, QEMU_OPTION_initrd },
6606

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

    
6639
    /* temporary options */
6640
    { "usb", 0, QEMU_OPTION_usb },
6641
    { "cirrusvga", 0, QEMU_OPTION_cirrusvga },
6642
    { "no-acpi", 0, QEMU_OPTION_no_acpi },
6643
    { "no-reboot", 0, QEMU_OPTION_no_reboot },
6644
    { "daemonize", 0, QEMU_OPTION_daemonize },
6645
    { "option-rom", HAS_ARG, QEMU_OPTION_option_rom },
6646
#if defined(TARGET_ARM)
6647
    { "semihosting", 0, QEMU_OPTION_semihosting },
6648
#endif
6649
    { "name", HAS_ARG, QEMU_OPTION_name },
6650
    { NULL },
6651
};
6652

    
6653
#if defined (TARGET_I386) && defined(USE_CODE_COPY)
6654

    
6655
/* this stack is only used during signal handling */
6656
#define SIGNAL_STACK_SIZE 32768
6657

    
6658
static uint8_t *signal_stack;
6659

    
6660
#endif
6661

    
6662
/* password input */
6663

    
6664
static BlockDriverState *get_bdrv(int index)
6665
{
6666
    BlockDriverState *bs;
6667

    
6668
    if (index < 4) {
6669
        bs = bs_table[index];
6670
    } else if (index < 6) {
6671
        bs = fd_table[index - 4];
6672
    } else {
6673
        bs = NULL;
6674
    }
6675
    return bs;
6676
}
6677

    
6678
static void read_passwords(void)
6679
{
6680
    BlockDriverState *bs;
6681
    int i, j;
6682
    char password[256];
6683

    
6684
    for(i = 0; i < 6; i++) {
6685
        bs = get_bdrv(i);
6686
        if (bs && bdrv_is_encrypted(bs)) {
6687
            term_printf("%s is encrypted.\n", bdrv_get_device_name(bs));
6688
            for(j = 0; j < 3; j++) {
6689
                monitor_readline("Password: ", 
6690
                                 1, password, sizeof(password));
6691
                if (bdrv_set_key(bs, password) == 0)
6692
                    break;
6693
                term_printf("invalid password\n");
6694
            }
6695
        }
6696
    }
6697
}
6698

    
6699
/* XXX: currently we cannot use simultaneously different CPUs */
6700
void register_machines(void)
6701
{
6702
#if defined(TARGET_I386)
6703
    qemu_register_machine(&pc_machine);
6704
    qemu_register_machine(&isapc_machine);
6705
#elif defined(TARGET_PPC)
6706
    qemu_register_machine(&heathrow_machine);
6707
    qemu_register_machine(&core99_machine);
6708
    qemu_register_machine(&prep_machine);
6709
#elif defined(TARGET_MIPS)
6710
    qemu_register_machine(&mips_machine);
6711
    qemu_register_machine(&mips_malta_machine);
6712
#elif defined(TARGET_SPARC)
6713
#ifdef TARGET_SPARC64
6714
    qemu_register_machine(&sun4u_machine);
6715
#else
6716
    qemu_register_machine(&sun4m_machine);
6717
#endif
6718
#elif defined(TARGET_ARM)
6719
    qemu_register_machine(&integratorcp_machine);
6720
    qemu_register_machine(&versatilepb_machine);
6721
    qemu_register_machine(&versatileab_machine);
6722
    qemu_register_machine(&realview_machine);
6723
#elif defined(TARGET_SH4)
6724
    qemu_register_machine(&shix_machine);
6725
#else
6726
#error unsupported CPU
6727
#endif
6728
}
6729

    
6730
#ifdef HAS_AUDIO
6731
struct soundhw soundhw[] = {
6732
#ifdef TARGET_I386
6733
    {
6734
        "pcspk",
6735
        "PC speaker",
6736
        0,
6737
        1,
6738
        { .init_isa = pcspk_audio_init }
6739
    },
6740
#endif
6741
    {
6742
        "sb16",
6743
        "Creative Sound Blaster 16",
6744
        0,
6745
        1,
6746
        { .init_isa = SB16_init }
6747
    },
6748

    
6749
#ifdef CONFIG_ADLIB
6750
    {
6751
        "adlib",
6752
#ifdef HAS_YMF262
6753
        "Yamaha YMF262 (OPL3)",
6754
#else
6755
        "Yamaha YM3812 (OPL2)",
6756
#endif
6757
        0,
6758
        1,
6759
        { .init_isa = Adlib_init }
6760
    },
6761
#endif
6762

    
6763
#ifdef CONFIG_GUS
6764
    {
6765
        "gus",
6766
        "Gravis Ultrasound GF1",
6767
        0,
6768
        1,
6769
        { .init_isa = GUS_init }
6770
    },
6771
#endif
6772

    
6773
    {
6774
        "es1370",
6775
        "ENSONIQ AudioPCI ES1370",
6776
        0,
6777
        0,
6778
        { .init_pci = es1370_init }
6779
    },
6780

    
6781
    { NULL, NULL, 0, 0, { NULL } }
6782
};
6783

    
6784
static void select_soundhw (const char *optarg)
6785
{
6786
    struct soundhw *c;
6787

    
6788
    if (*optarg == '?') {
6789
    show_valid_cards:
6790

    
6791
        printf ("Valid sound card names (comma separated):\n");
6792
        for (c = soundhw; c->name; ++c) {
6793
            printf ("%-11s %s\n", c->name, c->descr);
6794
        }
6795
        printf ("\n-soundhw all will enable all of the above\n");
6796
        exit (*optarg != '?');
6797
    }
6798
    else {
6799
        size_t l;
6800
        const char *p;
6801
        char *e;
6802
        int bad_card = 0;
6803

    
6804
        if (!strcmp (optarg, "all")) {
6805
            for (c = soundhw; c->name; ++c) {
6806
                c->enabled = 1;
6807
            }
6808
            return;
6809
        }
6810

    
6811
        p = optarg;
6812
        while (*p) {
6813
            e = strchr (p, ',');
6814
            l = !e ? strlen (p) : (size_t) (e - p);
6815

    
6816
            for (c = soundhw; c->name; ++c) {
6817
                if (!strncmp (c->name, p, l)) {
6818
                    c->enabled = 1;
6819
                    break;
6820
                }
6821
            }
6822

    
6823
            if (!c->name) {
6824
                if (l > 80) {
6825
                    fprintf (stderr,
6826
                             "Unknown sound card name (too big to show)\n");
6827
                }
6828
                else {
6829
                    fprintf (stderr, "Unknown sound card name `%.*s'\n",
6830
                             (int) l, p);
6831
                }
6832
                bad_card = 1;
6833
            }
6834
            p += l + (e != NULL);
6835
        }
6836

    
6837
        if (bad_card)
6838
            goto show_valid_cards;
6839
    }
6840
}
6841
#endif
6842

    
6843
#ifdef _WIN32
6844
static BOOL WINAPI qemu_ctrl_handler(DWORD type)
6845
{
6846
    exit(STATUS_CONTROL_C_EXIT);
6847
    return TRUE;
6848
}
6849
#endif
6850

    
6851
#define MAX_NET_CLIENTS 32
6852

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

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

    
6915
    register_machines();
6916
    machine = first_machine;
6917
    cpu_model = NULL;
6918
    initrd_filename = NULL;
6919
    for(i = 0; i < MAX_FD; i++)
6920
        fd_filename[i] = NULL;
6921
    for(i = 0; i < MAX_DISKS; i++)
6922
        hd_filename[i] = NULL;
6923
    ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
6924
    vga_ram_size = VGA_RAM_SIZE;
6925
#ifdef CONFIG_GDBSTUB
6926
    use_gdbstub = 0;
6927
    gdbstub_port = DEFAULT_GDBSTUB_PORT;
6928
#endif
6929
    snapshot = 0;
6930
    nographic = 0;
6931
    kernel_filename = NULL;
6932
    kernel_cmdline = "";
6933
#ifdef TARGET_PPC
6934
    cdrom_index = 1;
6935
#else
6936
    cdrom_index = 2;
6937
#endif
6938
    cyls = heads = secs = 0;
6939
    translation = BIOS_ATA_TRANSLATION_AUTO;
6940
    pstrcpy(monitor_device, sizeof(monitor_device), "vc");
6941

    
6942
    pstrcpy(serial_devices[0], sizeof(serial_devices[0]), "vc");
6943
    for(i = 1; i < MAX_SERIAL_PORTS; i++)
6944
        serial_devices[i][0] = '\0';
6945
    serial_device_index = 0;
6946
    
6947
    pstrcpy(parallel_devices[0], sizeof(parallel_devices[0]), "vc");
6948
    for(i = 1; i < MAX_PARALLEL_PORTS; i++)
6949
        parallel_devices[i][0] = '\0';
6950
    parallel_device_index = 0;
6951
    
6952
    usb_devices_index = 0;
6953
    
6954
    nb_net_clients = 0;
6955

    
6956
    nb_nics = 0;
6957
    /* default mac address of the first network interface */
6958
    
6959
    optind = 1;
6960
    for(;;) {
6961
        if (optind >= argc)
6962
            break;
6963
        r = argv[optind];
6964
        if (r[0] != '-') {
6965
            hd_filename[0] = argv[optind++];
6966
        } else {
6967
            const QEMUOption *popt;
6968

    
6969
            optind++;
6970
            /* Treat --foo the same as -foo.  */
6971
            if (r[1] == '-')
6972
                r++;
6973
            popt = qemu_options;
6974
            for(;;) {
6975
                if (!popt->name) {
6976
                    fprintf(stderr, "%s: invalid option -- '%s'\n", 
6977
                            argv[0], r);
6978
                    exit(1);
6979
                }
6980
                if (!strcmp(popt->name, r + 1))
6981
                    break;
6982
                popt++;
6983
            }
6984
            if (popt->flags & HAS_ARG) {
6985
                if (optind >= argc) {
6986
                    fprintf(stderr, "%s: option '%s' requires an argument\n",
6987
                            argv[0], r);
6988
                    exit(1);
6989
                }
6990
                optarg = argv[optind++];
6991
            } else {
6992
                optarg = NULL;
6993
            }
6994

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

    
7357
#ifndef _WIN32
7358
    if (daemonize && !nographic && vnc_display == NULL) {
7359
        fprintf(stderr, "Can only daemonize if using -nographic or -vnc\n");
7360
        daemonize = 0;
7361
    }
7362

    
7363
    if (daemonize) {
7364
        pid_t pid;
7365

    
7366
        if (pipe(fds) == -1)
7367
            exit(1);
7368

    
7369
        pid = fork();
7370
        if (pid > 0) {
7371
            uint8_t status;
7372
            ssize_t len;
7373

    
7374
            close(fds[1]);
7375

    
7376
        again:
7377
            len = read(fds[0], &status, 1);
7378
            if (len == -1 && (errno == EINTR))
7379
                goto again;
7380

    
7381
            if (len != 1)
7382
                exit(1);
7383
            else if (status == 1) {
7384
                fprintf(stderr, "Could not acquire pidfile\n");
7385
                exit(1);
7386
            } else
7387
                exit(0);
7388
        } else if (pid < 0)
7389
            exit(1);
7390

    
7391
        setsid();
7392

    
7393
        pid = fork();
7394
        if (pid > 0)
7395
            exit(0);
7396
        else if (pid < 0)
7397
            exit(1);
7398

    
7399
        umask(027);
7400
        chdir("/");
7401

    
7402
        signal(SIGTSTP, SIG_IGN);
7403
        signal(SIGTTOU, SIG_IGN);
7404
        signal(SIGTTIN, SIG_IGN);
7405
    }
7406
#endif
7407

    
7408
    if (pid_file && create_pidfile(pid_file) != 0) {
7409
        if (daemonize) {
7410
            uint8_t status = 1;
7411
            write(fds[1], &status, 1);
7412
        } else
7413
            fprintf(stderr, "Could not acquire pid file\n");
7414
        exit(1);
7415
    }
7416

    
7417
#ifdef USE_KQEMU
7418
    if (smp_cpus > 1)
7419
        kqemu_allowed = 0;
7420
#endif
7421
    linux_boot = (kernel_filename != NULL);
7422

    
7423
    if (!linux_boot &&
7424
        boot_device != 'n' &&
7425
        hd_filename[0] == '\0' && 
7426
        (cdrom_index >= 0 && hd_filename[cdrom_index] == '\0') &&
7427
        fd_filename[0] == '\0')
7428
        help();
7429

    
7430
    /* boot to floppy or the default cd if no hard disk defined yet */
7431
    if (hd_filename[0] == '\0' && boot_device == 'c') {
7432
        if (fd_filename[0] != '\0')
7433
            boot_device = 'a';
7434
        else
7435
            boot_device = 'd';
7436
    }
7437

    
7438
    setvbuf(stdout, NULL, _IOLBF, 0);
7439
    
7440
    init_timers();
7441
    init_timer_alarm();
7442
    qemu_aio_init();
7443

    
7444
#ifdef _WIN32
7445
    socket_init();
7446
#endif
7447

    
7448
    /* init network clients */
7449
    if (nb_net_clients == 0) {
7450
        /* if no clients, we use a default config */
7451
        pstrcpy(net_clients[0], sizeof(net_clients[0]),
7452
                "nic");
7453
        pstrcpy(net_clients[1], sizeof(net_clients[0]),
7454
                "user");
7455
        nb_net_clients = 2;
7456
    }
7457

    
7458
    for(i = 0;i < nb_net_clients; i++) {
7459
        if (net_client_init(net_clients[i]) < 0)
7460
            exit(1);
7461
    }
7462

    
7463
#ifdef TARGET_I386
7464
    if (boot_device == 'n') {
7465
        for (i = 0; i < nb_nics; i++) {
7466
            const char *model = nd_table[i].model;
7467
            char buf[1024];
7468
            if (model == NULL)
7469
                model = "ne2k_pci";
7470
            snprintf(buf, sizeof(buf), "%s/pxe-%s.bin", bios_dir, model);
7471
            if (get_image_size(buf) > 0) {
7472
                option_rom[nb_option_roms] = strdup(buf);
7473
                nb_option_roms++;
7474
                break;
7475
            }
7476
        }
7477
        if (i == nb_nics) {
7478
            fprintf(stderr, "No valid PXE rom found for network device\n");
7479
            exit(1);
7480
        }
7481
        boot_device = 'c'; /* to prevent confusion by the BIOS */
7482
    }
7483
#endif
7484

    
7485
    /* init the memory */
7486
    phys_ram_size = ram_size + vga_ram_size + MAX_BIOS_SIZE;
7487

    
7488
    phys_ram_base = qemu_vmalloc(phys_ram_size);
7489
    if (!phys_ram_base) {
7490
        fprintf(stderr, "Could not allocate physical memory\n");
7491
        exit(1);
7492
    }
7493

    
7494
    /* we always create the cdrom drive, even if no disk is there */
7495
    bdrv_init();
7496
    if (cdrom_index >= 0) {
7497
        bs_table[cdrom_index] = bdrv_new("cdrom");
7498
        bdrv_set_type_hint(bs_table[cdrom_index], BDRV_TYPE_CDROM);
7499
    }
7500

    
7501
    /* open the virtual block devices */
7502
    for(i = 0; i < MAX_DISKS; i++) {
7503
        if (hd_filename[i]) {
7504
            if (!bs_table[i]) {
7505
                char buf[64];
7506
                snprintf(buf, sizeof(buf), "hd%c", i + 'a');
7507
                bs_table[i] = bdrv_new(buf);
7508
            }
7509
            if (bdrv_open(bs_table[i], hd_filename[i], snapshot ? BDRV_O_SNAPSHOT : 0) < 0) {
7510
                fprintf(stderr, "qemu: could not open hard disk image '%s'\n",
7511
                        hd_filename[i]);
7512
                exit(1);
7513
            }
7514
            if (i == 0 && cyls != 0) {
7515
                bdrv_set_geometry_hint(bs_table[i], cyls, heads, secs);
7516
                bdrv_set_translation_hint(bs_table[i], translation);
7517
            }
7518
        }
7519
    }
7520

    
7521
    /* we always create at least one floppy disk */
7522
    fd_table[0] = bdrv_new("fda");
7523
    bdrv_set_type_hint(fd_table[0], BDRV_TYPE_FLOPPY);
7524

    
7525
    for(i = 0; i < MAX_FD; i++) {
7526
        if (fd_filename[i]) {
7527
            if (!fd_table[i]) {
7528
                char buf[64];
7529
                snprintf(buf, sizeof(buf), "fd%c", i + 'a');
7530
                fd_table[i] = bdrv_new(buf);
7531
                bdrv_set_type_hint(fd_table[i], BDRV_TYPE_FLOPPY);
7532
            }
7533
            if (fd_filename[i] != '\0') {
7534
                if (bdrv_open(fd_table[i], fd_filename[i],
7535
                              snapshot ? BDRV_O_SNAPSHOT : 0) < 0) {
7536
                    fprintf(stderr, "qemu: could not open floppy disk image '%s'\n",
7537
                            fd_filename[i]);
7538
                    exit(1);
7539
                }
7540
            }
7541
        }
7542
    }
7543

    
7544
    register_savevm("timer", 0, 2, timer_save, timer_load, NULL);
7545
    register_savevm("ram", 0, 2, ram_save, ram_load, NULL);
7546

    
7547
    init_ioports();
7548

    
7549
    /* terminal init */
7550
    if (nographic) {
7551
        dumb_display_init(ds);
7552
    } else if (vnc_display != NULL) {
7553
        vnc_display_init(ds, vnc_display);
7554
    } else {
7555
#if defined(CONFIG_SDL)
7556
        sdl_display_init(ds, full_screen, no_frame);
7557
#elif defined(CONFIG_COCOA)
7558
        cocoa_display_init(ds, full_screen);
7559
#else
7560
        dumb_display_init(ds);
7561
#endif
7562
    }
7563

    
7564
    /* Maintain compatibility with multiple stdio monitors */
7565
    if (!strcmp(monitor_device,"stdio")) {
7566
        for (i = 0; i < MAX_SERIAL_PORTS; i++) {
7567
            if (!strcmp(serial_devices[i],"mon:stdio")) {
7568
                monitor_device[0] = '\0';
7569
                break;
7570
            } else if (!strcmp(serial_devices[i],"stdio")) {
7571
                monitor_device[0] = '\0';
7572
                pstrcpy(serial_devices[0], sizeof(serial_devices[0]), "mon:stdio");
7573
                break;
7574
            }
7575
        }
7576
    }
7577
    if (monitor_device[0] != '\0') {
7578
        monitor_hd = qemu_chr_open(monitor_device);
7579
        if (!monitor_hd) {
7580
            fprintf(stderr, "qemu: could not open monitor device '%s'\n", monitor_device);
7581
            exit(1);
7582
        }
7583
        monitor_init(monitor_hd, !nographic);
7584
    }
7585

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

    
7600
    for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
7601
        const char *devname = parallel_devices[i];
7602
        if (devname[0] != '\0' && strcmp(devname, "none")) {
7603
            parallel_hds[i] = qemu_chr_open(devname);
7604
            if (!parallel_hds[i]) {
7605
                fprintf(stderr, "qemu: could not open parallel device '%s'\n", 
7606
                        devname);
7607
                exit(1);
7608
            }
7609
            if (!strcmp(devname, "vc"))
7610
                qemu_chr_printf(parallel_hds[i], "parallel%d console\r\n", i);
7611
        }
7612
    }
7613

    
7614
    machine->init(ram_size, vga_ram_size, boot_device,
7615
                  ds, fd_filename, snapshot,
7616
                  kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
7617

    
7618
    /* init USB devices */
7619
    if (usb_enabled) {
7620
        for(i = 0; i < usb_devices_index; i++) {
7621
            if (usb_device_add(usb_devices[i]) < 0) {
7622
                fprintf(stderr, "Warning: could not add USB device %s\n",
7623
                        usb_devices[i]);
7624
            }
7625
        }
7626
    }
7627

    
7628
    gui_timer = qemu_new_timer(rt_clock, gui_update, NULL);
7629
    qemu_mod_timer(gui_timer, qemu_get_clock(rt_clock));
7630

    
7631
#ifdef CONFIG_GDBSTUB
7632
    if (use_gdbstub) {
7633
        /* XXX: use standard host:port notation and modify options
7634
           accordingly. */
7635
        if (gdbserver_start(gdbstub_port) < 0) {
7636
            fprintf(stderr, "qemu: could not open gdbstub device on port '%s'\n",
7637
                    gdbstub_port);
7638
            exit(1);
7639
        }
7640
    } else 
7641
#endif
7642
    if (loadvm)
7643
        do_loadvm(loadvm);
7644

    
7645
    {
7646
        /* XXX: simplify init */
7647
        read_passwords();
7648
        if (autostart) {
7649
            vm_start();
7650
        }
7651
    }
7652

    
7653
    if (daemonize) {
7654
        uint8_t status = 0;
7655
        ssize_t len;
7656
        int fd;
7657

    
7658
    again1:
7659
        len = write(fds[1], &status, 1);
7660
        if (len == -1 && (errno == EINTR))
7661
            goto again1;
7662

    
7663
        if (len != 1)
7664
            exit(1);
7665

    
7666
        fd = open("/dev/null", O_RDWR);
7667
        if (fd == -1)
7668
            exit(1);
7669

    
7670
        dup2(fd, 0);
7671
        dup2(fd, 1);
7672
        dup2(fd, 2);
7673

    
7674
        close(fd);
7675
    }
7676

    
7677
    main_loop();
7678
    quit_timers();
7679
    return 0;
7680
}