Statistics
| Branch: | Revision:

root / qemu-char.c @ e668287d

History | View | Annotate | Download (96.3 kB)

1
/*
2
 * QEMU System Emulator
3
 *
4
 * Copyright (c) 2003-2008 Fabrice Bellard
5
 *
6
 * Permission is hereby granted, free of charge, to any person obtaining a copy
7
 * of this software and associated documentation files (the "Software"), to deal
8
 * in the Software without restriction, including without limitation the rights
9
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
 * copies of the Software, and to permit persons to whom the Software is
11
 * furnished to do so, subject to the following conditions:
12
 *
13
 * The above copyright notice and this permission notice shall be included in
14
 * all copies or substantial portions of the Software.
15
 *
16
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
 * THE SOFTWARE.
23
 */
24
#include "qemu-common.h"
25
#include "monitor/monitor.h"
26
#include "ui/console.h"
27
#include "sysemu/sysemu.h"
28
#include "qemu/timer.h"
29
#include "sysemu/char.h"
30
#include "hw/usb.h"
31
#include "qmp-commands.h"
32

    
33
#include <unistd.h>
34
#include <fcntl.h>
35
#include <time.h>
36
#include <errno.h>
37
#include <sys/time.h>
38
#include <zlib.h>
39

    
40
#ifndef _WIN32
41
#include <sys/times.h>
42
#include <sys/wait.h>
43
#include <termios.h>
44
#include <sys/mman.h>
45
#include <sys/ioctl.h>
46
#include <sys/resource.h>
47
#include <sys/socket.h>
48
#include <netinet/in.h>
49
#include <net/if.h>
50
#include <arpa/inet.h>
51
#include <dirent.h>
52
#include <netdb.h>
53
#include <sys/select.h>
54
#ifdef CONFIG_BSD
55
#include <sys/stat.h>
56
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
57
#include <dev/ppbus/ppi.h>
58
#include <dev/ppbus/ppbconf.h>
59
#elif defined(__DragonFly__)
60
#include <dev/misc/ppi/ppi.h>
61
#include <bus/ppbus/ppbconf.h>
62
#endif
63
#else
64
#ifdef __linux__
65
#include <linux/ppdev.h>
66
#include <linux/parport.h>
67
#endif
68
#ifdef __sun__
69
#include <sys/stat.h>
70
#include <sys/ethernet.h>
71
#include <sys/sockio.h>
72
#include <netinet/arp.h>
73
#include <netinet/in.h>
74
#include <netinet/in_systm.h>
75
#include <netinet/ip.h>
76
#include <netinet/ip_icmp.h> // must come after ip.h
77
#include <netinet/udp.h>
78
#include <netinet/tcp.h>
79
#endif
80
#endif
81
#endif
82

    
83
#include "qemu/sockets.h"
84
#include "ui/qemu-spice.h"
85

    
86
#define READ_BUF_LEN 4096
87

    
88
/***********************************************************/
89
/* character device */
90

    
91
static QTAILQ_HEAD(CharDriverStateHead, CharDriverState) chardevs =
92
    QTAILQ_HEAD_INITIALIZER(chardevs);
93

    
94
void qemu_chr_be_event(CharDriverState *s, int event)
95
{
96
    /* Keep track if the char device is open */
97
    switch (event) {
98
        case CHR_EVENT_OPENED:
99
            s->be_open = 1;
100
            break;
101
        case CHR_EVENT_CLOSED:
102
            s->be_open = 0;
103
            break;
104
    }
105

    
106
    if (!s->chr_event)
107
        return;
108
    s->chr_event(s->handler_opaque, event);
109
}
110

    
111
void qemu_chr_be_generic_open(CharDriverState *s)
112
{
113
    qemu_chr_be_event(s, CHR_EVENT_OPENED);
114
}
115

    
116
int qemu_chr_fe_write(CharDriverState *s, const uint8_t *buf, int len)
117
{
118
    return s->chr_write(s, buf, len);
119
}
120

    
121
int qemu_chr_fe_write_all(CharDriverState *s, const uint8_t *buf, int len)
122
{
123
    int offset = 0;
124
    int res;
125

    
126
    while (offset < len) {
127
        do {
128
            res = s->chr_write(s, buf + offset, len - offset);
129
            if (res == -1 && errno == EAGAIN) {
130
                g_usleep(100);
131
            }
132
        } while (res == -1 && errno == EAGAIN);
133

    
134
        if (res == 0) {
135
            break;
136
        }
137

    
138
        if (res < 0) {
139
            return res;
140
        }
141

    
142
        offset += res;
143
    }
144

    
145
    return offset;
146
}
147

    
148
int qemu_chr_fe_ioctl(CharDriverState *s, int cmd, void *arg)
149
{
150
    if (!s->chr_ioctl)
151
        return -ENOTSUP;
152
    return s->chr_ioctl(s, cmd, arg);
153
}
154

    
155
int qemu_chr_be_can_write(CharDriverState *s)
156
{
157
    if (!s->chr_can_read)
158
        return 0;
159
    return s->chr_can_read(s->handler_opaque);
160
}
161

    
162
void qemu_chr_be_write(CharDriverState *s, uint8_t *buf, int len)
163
{
164
    if (s->chr_read) {
165
        s->chr_read(s->handler_opaque, buf, len);
166
    }
167
}
168

    
169
int qemu_chr_fe_get_msgfd(CharDriverState *s)
170
{
171
    return s->get_msgfd ? s->get_msgfd(s) : -1;
172
}
173

    
174
int qemu_chr_add_client(CharDriverState *s, int fd)
175
{
176
    return s->chr_add_client ? s->chr_add_client(s, fd) : -1;
177
}
178

    
179
void qemu_chr_accept_input(CharDriverState *s)
180
{
181
    if (s->chr_accept_input)
182
        s->chr_accept_input(s);
183
    qemu_notify_event();
184
}
185

    
186
void qemu_chr_fe_printf(CharDriverState *s, const char *fmt, ...)
187
{
188
    char buf[READ_BUF_LEN];
189
    va_list ap;
190
    va_start(ap, fmt);
191
    vsnprintf(buf, sizeof(buf), fmt, ap);
192
    qemu_chr_fe_write(s, (uint8_t *)buf, strlen(buf));
193
    va_end(ap);
194
}
195

    
196
void qemu_chr_add_handlers(CharDriverState *s,
197
                           IOCanReadHandler *fd_can_read,
198
                           IOReadHandler *fd_read,
199
                           IOEventHandler *fd_event,
200
                           void *opaque)
201
{
202
    int fe_open;
203

    
204
    if (!opaque && !fd_can_read && !fd_read && !fd_event) {
205
        fe_open = 0;
206
    } else {
207
        fe_open = 1;
208
    }
209
    s->chr_can_read = fd_can_read;
210
    s->chr_read = fd_read;
211
    s->chr_event = fd_event;
212
    s->handler_opaque = opaque;
213
    if (s->chr_update_read_handler)
214
        s->chr_update_read_handler(s);
215

    
216
    if (!s->explicit_fe_open) {
217
        qemu_chr_fe_set_open(s, fe_open);
218
    }
219

    
220
    /* We're connecting to an already opened device, so let's make sure we
221
       also get the open event */
222
    if (fe_open && s->be_open) {
223
        qemu_chr_be_generic_open(s);
224
    }
225
}
226

    
227
static int null_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
228
{
229
    return len;
230
}
231

    
232
static CharDriverState *qemu_chr_open_null(void)
233
{
234
    CharDriverState *chr;
235

    
236
    chr = g_malloc0(sizeof(CharDriverState));
237
    chr->chr_write = null_chr_write;
238
    chr->explicit_be_open = true;
239
    return chr;
240
}
241

    
242
/* MUX driver for serial I/O splitting */
243
#define MAX_MUX 4
244
#define MUX_BUFFER_SIZE 32        /* Must be a power of 2.  */
245
#define MUX_BUFFER_MASK (MUX_BUFFER_SIZE - 1)
246
typedef struct {
247
    IOCanReadHandler *chr_can_read[MAX_MUX];
248
    IOReadHandler *chr_read[MAX_MUX];
249
    IOEventHandler *chr_event[MAX_MUX];
250
    void *ext_opaque[MAX_MUX];
251
    CharDriverState *drv;
252
    int focus;
253
    int mux_cnt;
254
    int term_got_escape;
255
    int max_size;
256
    /* Intermediate input buffer allows to catch escape sequences even if the
257
       currently active device is not accepting any input - but only until it
258
       is full as well. */
259
    unsigned char buffer[MAX_MUX][MUX_BUFFER_SIZE];
260
    int prod[MAX_MUX];
261
    int cons[MAX_MUX];
262
    int timestamps;
263
    int linestart;
264
    int64_t timestamps_start;
265
} MuxDriver;
266

    
267

    
268
static int mux_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
269
{
270
    MuxDriver *d = chr->opaque;
271
    int ret;
272
    if (!d->timestamps) {
273
        ret = d->drv->chr_write(d->drv, buf, len);
274
    } else {
275
        int i;
276

    
277
        ret = 0;
278
        for (i = 0; i < len; i++) {
279
            if (d->linestart) {
280
                char buf1[64];
281
                int64_t ti;
282
                int secs;
283

    
284
                ti = qemu_get_clock_ms(rt_clock);
285
                if (d->timestamps_start == -1)
286
                    d->timestamps_start = ti;
287
                ti -= d->timestamps_start;
288
                secs = ti / 1000;
289
                snprintf(buf1, sizeof(buf1),
290
                         "[%02d:%02d:%02d.%03d] ",
291
                         secs / 3600,
292
                         (secs / 60) % 60,
293
                         secs % 60,
294
                         (int)(ti % 1000));
295
                d->drv->chr_write(d->drv, (uint8_t *)buf1, strlen(buf1));
296
                d->linestart = 0;
297
            }
298
            ret += d->drv->chr_write(d->drv, buf+i, 1);
299
            if (buf[i] == '\n') {
300
                d->linestart = 1;
301
            }
302
        }
303
    }
304
    return ret;
305
}
306

    
307
static const char * const mux_help[] = {
308
    "% h    print this help\n\r",
309
    "% x    exit emulator\n\r",
310
    "% s    save disk data back to file (if -snapshot)\n\r",
311
    "% t    toggle console timestamps\n\r"
312
    "% b    send break (magic sysrq)\n\r",
313
    "% c    switch between console and monitor\n\r",
314
    "% %  sends %\n\r",
315
    NULL
316
};
317

    
318
int term_escape_char = 0x01; /* ctrl-a is used for escape */
319
static void mux_print_help(CharDriverState *chr)
320
{
321
    int i, j;
322
    char ebuf[15] = "Escape-Char";
323
    char cbuf[50] = "\n\r";
324

    
325
    if (term_escape_char > 0 && term_escape_char < 26) {
326
        snprintf(cbuf, sizeof(cbuf), "\n\r");
327
        snprintf(ebuf, sizeof(ebuf), "C-%c", term_escape_char - 1 + 'a');
328
    } else {
329
        snprintf(cbuf, sizeof(cbuf),
330
                 "\n\rEscape-Char set to Ascii: 0x%02x\n\r\n\r",
331
                 term_escape_char);
332
    }
333
    chr->chr_write(chr, (uint8_t *)cbuf, strlen(cbuf));
334
    for (i = 0; mux_help[i] != NULL; i++) {
335
        for (j=0; mux_help[i][j] != '\0'; j++) {
336
            if (mux_help[i][j] == '%')
337
                chr->chr_write(chr, (uint8_t *)ebuf, strlen(ebuf));
338
            else
339
                chr->chr_write(chr, (uint8_t *)&mux_help[i][j], 1);
340
        }
341
    }
342
}
343

    
344
static void mux_chr_send_event(MuxDriver *d, int mux_nr, int event)
345
{
346
    if (d->chr_event[mux_nr])
347
        d->chr_event[mux_nr](d->ext_opaque[mux_nr], event);
348
}
349

    
350
static int mux_proc_byte(CharDriverState *chr, MuxDriver *d, int ch)
351
{
352
    if (d->term_got_escape) {
353
        d->term_got_escape = 0;
354
        if (ch == term_escape_char)
355
            goto send_char;
356
        switch(ch) {
357
        case '?':
358
        case 'h':
359
            mux_print_help(chr);
360
            break;
361
        case 'x':
362
            {
363
                 const char *term =  "QEMU: Terminated\n\r";
364
                 chr->chr_write(chr,(uint8_t *)term,strlen(term));
365
                 exit(0);
366
                 break;
367
            }
368
        case 's':
369
            bdrv_commit_all();
370
            break;
371
        case 'b':
372
            qemu_chr_be_event(chr, CHR_EVENT_BREAK);
373
            break;
374
        case 'c':
375
            /* Switch to the next registered device */
376
            mux_chr_send_event(d, d->focus, CHR_EVENT_MUX_OUT);
377
            d->focus++;
378
            if (d->focus >= d->mux_cnt)
379
                d->focus = 0;
380
            mux_chr_send_event(d, d->focus, CHR_EVENT_MUX_IN);
381
            break;
382
        case 't':
383
            d->timestamps = !d->timestamps;
384
            d->timestamps_start = -1;
385
            d->linestart = 0;
386
            break;
387
        }
388
    } else if (ch == term_escape_char) {
389
        d->term_got_escape = 1;
390
    } else {
391
    send_char:
392
        return 1;
393
    }
394
    return 0;
395
}
396

    
397
static void mux_chr_accept_input(CharDriverState *chr)
398
{
399
    MuxDriver *d = chr->opaque;
400
    int m = d->focus;
401

    
402
    while (d->prod[m] != d->cons[m] &&
403
           d->chr_can_read[m] &&
404
           d->chr_can_read[m](d->ext_opaque[m])) {
405
        d->chr_read[m](d->ext_opaque[m],
406
                       &d->buffer[m][d->cons[m]++ & MUX_BUFFER_MASK], 1);
407
    }
408
}
409

    
410
static int mux_chr_can_read(void *opaque)
411
{
412
    CharDriverState *chr = opaque;
413
    MuxDriver *d = chr->opaque;
414
    int m = d->focus;
415

    
416
    if ((d->prod[m] - d->cons[m]) < MUX_BUFFER_SIZE)
417
        return 1;
418
    if (d->chr_can_read[m])
419
        return d->chr_can_read[m](d->ext_opaque[m]);
420
    return 0;
421
}
422

    
423
static void mux_chr_read(void *opaque, const uint8_t *buf, int size)
424
{
425
    CharDriverState *chr = opaque;
426
    MuxDriver *d = chr->opaque;
427
    int m = d->focus;
428
    int i;
429

    
430
    mux_chr_accept_input (opaque);
431

    
432
    for(i = 0; i < size; i++)
433
        if (mux_proc_byte(chr, d, buf[i])) {
434
            if (d->prod[m] == d->cons[m] &&
435
                d->chr_can_read[m] &&
436
                d->chr_can_read[m](d->ext_opaque[m]))
437
                d->chr_read[m](d->ext_opaque[m], &buf[i], 1);
438
            else
439
                d->buffer[m][d->prod[m]++ & MUX_BUFFER_MASK] = buf[i];
440
        }
441
}
442

    
443
static void mux_chr_event(void *opaque, int event)
444
{
445
    CharDriverState *chr = opaque;
446
    MuxDriver *d = chr->opaque;
447
    int i;
448

    
449
    /* Send the event to all registered listeners */
450
    for (i = 0; i < d->mux_cnt; i++)
451
        mux_chr_send_event(d, i, event);
452
}
453

    
454
static void mux_chr_update_read_handler(CharDriverState *chr)
455
{
456
    MuxDriver *d = chr->opaque;
457

    
458
    if (d->mux_cnt >= MAX_MUX) {
459
        fprintf(stderr, "Cannot add I/O handlers, MUX array is full\n");
460
        return;
461
    }
462
    d->ext_opaque[d->mux_cnt] = chr->handler_opaque;
463
    d->chr_can_read[d->mux_cnt] = chr->chr_can_read;
464
    d->chr_read[d->mux_cnt] = chr->chr_read;
465
    d->chr_event[d->mux_cnt] = chr->chr_event;
466
    /* Fix up the real driver with mux routines */
467
    if (d->mux_cnt == 0) {
468
        qemu_chr_add_handlers(d->drv, mux_chr_can_read, mux_chr_read,
469
                              mux_chr_event, chr);
470
    }
471
    if (d->focus != -1) {
472
        mux_chr_send_event(d, d->focus, CHR_EVENT_MUX_OUT);
473
    }
474
    d->focus = d->mux_cnt;
475
    d->mux_cnt++;
476
    mux_chr_send_event(d, d->focus, CHR_EVENT_MUX_IN);
477
}
478

    
479
static CharDriverState *qemu_chr_open_mux(CharDriverState *drv)
480
{
481
    CharDriverState *chr;
482
    MuxDriver *d;
483

    
484
    chr = g_malloc0(sizeof(CharDriverState));
485
    d = g_malloc0(sizeof(MuxDriver));
486

    
487
    chr->opaque = d;
488
    d->drv = drv;
489
    d->focus = -1;
490
    chr->chr_write = mux_chr_write;
491
    chr->chr_update_read_handler = mux_chr_update_read_handler;
492
    chr->chr_accept_input = mux_chr_accept_input;
493
    /* Frontend guest-open / -close notification is not support with muxes */
494
    chr->chr_set_fe_open = NULL;
495

    
496
    return chr;
497
}
498

    
499

    
500
#ifdef _WIN32
501
int send_all(int fd, const void *buf, int len1)
502
{
503
    int ret, len;
504

    
505
    len = len1;
506
    while (len > 0) {
507
        ret = send(fd, buf, len, 0);
508
        if (ret < 0) {
509
            errno = WSAGetLastError();
510
            if (errno != WSAEWOULDBLOCK) {
511
                return -1;
512
            }
513
        } else if (ret == 0) {
514
            break;
515
        } else {
516
            buf += ret;
517
            len -= ret;
518
        }
519
    }
520
    return len1 - len;
521
}
522

    
523
#else
524

    
525
int send_all(int fd, const void *_buf, int len1)
526
{
527
    int ret, len;
528
    const uint8_t *buf = _buf;
529

    
530
    len = len1;
531
    while (len > 0) {
532
        ret = write(fd, buf, len);
533
        if (ret < 0) {
534
            if (errno != EINTR && errno != EAGAIN)
535
                return -1;
536
        } else if (ret == 0) {
537
            break;
538
        } else {
539
            buf += ret;
540
            len -= ret;
541
        }
542
    }
543
    return len1 - len;
544
}
545

    
546
int recv_all(int fd, void *_buf, int len1, bool single_read)
547
{
548
    int ret, len;
549
    uint8_t *buf = _buf;
550

    
551
    len = len1;
552
    while ((len > 0) && (ret = read(fd, buf, len)) != 0) {
553
        if (ret < 0) {
554
            if (errno != EINTR && errno != EAGAIN) {
555
                return -1;
556
            }
557
            continue;
558
        } else {
559
            if (single_read) {
560
                return ret;
561
            }
562
            buf += ret;
563
            len -= ret;
564
        }
565
    }
566
    return len1 - len;
567
}
568

    
569
#endif /* !_WIN32 */
570

    
571
typedef struct IOWatchPoll
572
{
573
    GSource parent;
574

    
575
    GIOChannel *channel;
576
    GSource *src;
577

    
578
    IOCanReadHandler *fd_can_read;
579
    GSourceFunc fd_read;
580
    void *opaque;
581
} IOWatchPoll;
582

    
583
static IOWatchPoll *io_watch_poll_from_source(GSource *source)
584
{
585
    return container_of(source, IOWatchPoll, parent);
586
}
587

    
588
static gboolean io_watch_poll_prepare(GSource *source, gint *timeout_)
589
{
590
    IOWatchPoll *iwp = io_watch_poll_from_source(source);
591
    bool now_active = iwp->fd_can_read(iwp->opaque) > 0;
592
    bool was_active = iwp->src != NULL;
593
    if (was_active == now_active) {
594
        return FALSE;
595
    }
596

    
597
    if (now_active) {
598
        iwp->src = g_io_create_watch(iwp->channel, G_IO_IN | G_IO_ERR | G_IO_HUP);
599
        g_source_set_callback(iwp->src, iwp->fd_read, iwp->opaque, NULL);
600
        g_source_attach(iwp->src, NULL);
601
    } else {
602
        g_source_destroy(iwp->src);
603
        g_source_unref(iwp->src);
604
        iwp->src = NULL;
605
    }
606
    return FALSE;
607
}
608

    
609
static gboolean io_watch_poll_check(GSource *source)
610
{
611
    return FALSE;
612
}
613

    
614
static gboolean io_watch_poll_dispatch(GSource *source, GSourceFunc callback,
615
                                       gpointer user_data)
616
{
617
    abort();
618
}
619

    
620
static void io_watch_poll_finalize(GSource *source)
621
{
622
    /* Due to a glib bug, removing the last reference to a source
623
     * inside a finalize callback causes recursive locking (and a
624
     * deadlock).  This is not a problem inside other callbacks,
625
     * including dispatch callbacks, so we call io_remove_watch_poll
626
     * to remove this source.  At this point, iwp->src must
627
     * be NULL, or we would leak it.
628
     *
629
     * This would be solved much more elegantly by child sources,
630
     * but we support older glib versions that do not have them.
631
     */
632
    IOWatchPoll *iwp = io_watch_poll_from_source(source);
633
    assert(iwp->src == NULL);
634
}
635

    
636
static GSourceFuncs io_watch_poll_funcs = {
637
    .prepare = io_watch_poll_prepare,
638
    .check = io_watch_poll_check,
639
    .dispatch = io_watch_poll_dispatch,
640
    .finalize = io_watch_poll_finalize,
641
};
642

    
643
/* Can only be used for read */
644
static guint io_add_watch_poll(GIOChannel *channel,
645
                               IOCanReadHandler *fd_can_read,
646
                               GIOFunc fd_read,
647
                               gpointer user_data)
648
{
649
    IOWatchPoll *iwp;
650
    int tag;
651

    
652
    iwp = (IOWatchPoll *) g_source_new(&io_watch_poll_funcs, sizeof(IOWatchPoll));
653
    iwp->fd_can_read = fd_can_read;
654
    iwp->opaque = user_data;
655
    iwp->channel = channel;
656
    iwp->fd_read = (GSourceFunc) fd_read;
657
    iwp->src = NULL;
658

    
659
    tag = g_source_attach(&iwp->parent, NULL);
660
    g_source_unref(&iwp->parent);
661
    return tag;
662
}
663

    
664
static void io_remove_watch_poll(guint tag)
665
{
666
    GSource *source;
667
    IOWatchPoll *iwp;
668

    
669
    g_return_if_fail (tag > 0);
670

    
671
    source = g_main_context_find_source_by_id(NULL, tag);
672
    g_return_if_fail (source != NULL);
673

    
674
    iwp = io_watch_poll_from_source(source);
675
    if (iwp->src) {
676
        g_source_destroy(iwp->src);
677
        g_source_unref(iwp->src);
678
        iwp->src = NULL;
679
    }
680
    g_source_destroy(&iwp->parent);
681
}
682

    
683
#ifndef _WIN32
684
static GIOChannel *io_channel_from_fd(int fd)
685
{
686
    GIOChannel *chan;
687

    
688
    if (fd == -1) {
689
        return NULL;
690
    }
691

    
692
    chan = g_io_channel_unix_new(fd);
693

    
694
    g_io_channel_set_encoding(chan, NULL, NULL);
695
    g_io_channel_set_buffered(chan, FALSE);
696

    
697
    return chan;
698
}
699
#endif
700

    
701
static GIOChannel *io_channel_from_socket(int fd)
702
{
703
    GIOChannel *chan;
704

    
705
    if (fd == -1) {
706
        return NULL;
707
    }
708

    
709
#ifdef _WIN32
710
    chan = g_io_channel_win32_new_socket(fd);
711
#else
712
    chan = g_io_channel_unix_new(fd);
713
#endif
714

    
715
    g_io_channel_set_encoding(chan, NULL, NULL);
716
    g_io_channel_set_buffered(chan, FALSE);
717

    
718
    return chan;
719
}
720

    
721
static int io_channel_send(GIOChannel *fd, const void *buf, size_t len)
722
{
723
    GIOStatus status;
724
    size_t offset;
725

    
726
    offset = 0;
727
    while (offset < len) {
728
        gsize bytes_written;
729

    
730
        status = g_io_channel_write_chars(fd, buf + offset, len - offset,
731
                                          &bytes_written, NULL);
732
        if (status != G_IO_STATUS_NORMAL) {
733
            if (status == G_IO_STATUS_AGAIN) {
734
                /* If we've written any data, return a partial write. */
735
                if (offset) {
736
                    break;
737
                }
738
                errno = EAGAIN;
739
            } else {
740
                errno = EINVAL;
741
            }
742

    
743
            return -1;
744
        } else if (status == G_IO_STATUS_EOF) {
745
            break;
746
        }
747

    
748
        offset += bytes_written;
749
    }
750

    
751
    return offset;
752
}
753

    
754
#ifndef _WIN32
755

    
756
typedef struct FDCharDriver {
757
    CharDriverState *chr;
758
    GIOChannel *fd_in, *fd_out;
759
    guint fd_in_tag;
760
    int max_size;
761
    QTAILQ_ENTRY(FDCharDriver) node;
762
} FDCharDriver;
763

    
764
static int fd_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
765
{
766
    FDCharDriver *s = chr->opaque;
767
    
768
    return io_channel_send(s->fd_out, buf, len);
769
}
770

    
771
static gboolean fd_chr_read(GIOChannel *chan, GIOCondition cond, void *opaque)
772
{
773
    CharDriverState *chr = opaque;
774
    FDCharDriver *s = chr->opaque;
775
    int len;
776
    uint8_t buf[READ_BUF_LEN];
777
    GIOStatus status;
778
    gsize bytes_read;
779

    
780
    len = sizeof(buf);
781
    if (len > s->max_size) {
782
        len = s->max_size;
783
    }
784
    if (len == 0) {
785
        return TRUE;
786
    }
787

    
788
    status = g_io_channel_read_chars(chan, (gchar *)buf,
789
                                     len, &bytes_read, NULL);
790
    if (status == G_IO_STATUS_EOF) {
791
        if (s->fd_in_tag) {
792
            io_remove_watch_poll(s->fd_in_tag);
793
            s->fd_in_tag = 0;
794
        }
795
        qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
796
        return FALSE;
797
    }
798
    if (status == G_IO_STATUS_NORMAL) {
799
        qemu_chr_be_write(chr, buf, bytes_read);
800
    }
801

    
802
    return TRUE;
803
}
804

    
805
static int fd_chr_read_poll(void *opaque)
806
{
807
    CharDriverState *chr = opaque;
808
    FDCharDriver *s = chr->opaque;
809

    
810
    s->max_size = qemu_chr_be_can_write(chr);
811
    return s->max_size;
812
}
813

    
814
static GSource *fd_chr_add_watch(CharDriverState *chr, GIOCondition cond)
815
{
816
    FDCharDriver *s = chr->opaque;
817
    return g_io_create_watch(s->fd_out, cond);
818
}
819

    
820
static void fd_chr_update_read_handler(CharDriverState *chr)
821
{
822
    FDCharDriver *s = chr->opaque;
823

    
824
    if (s->fd_in_tag) {
825
        io_remove_watch_poll(s->fd_in_tag);
826
        s->fd_in_tag = 0;
827
    }
828

    
829
    if (s->fd_in) {
830
        s->fd_in_tag = io_add_watch_poll(s->fd_in, fd_chr_read_poll, fd_chr_read, chr);
831
    }
832
}
833

    
834
static void fd_chr_close(struct CharDriverState *chr)
835
{
836
    FDCharDriver *s = chr->opaque;
837

    
838
    if (s->fd_in_tag) {
839
        io_remove_watch_poll(s->fd_in_tag);
840
        s->fd_in_tag = 0;
841
    }
842

    
843
    if (s->fd_in) {
844
        g_io_channel_unref(s->fd_in);
845
    }
846
    if (s->fd_out) {
847
        g_io_channel_unref(s->fd_out);
848
    }
849

    
850
    g_free(s);
851
    qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
852
}
853

    
854
/* open a character device to a unix fd */
855
static CharDriverState *qemu_chr_open_fd(int fd_in, int fd_out)
856
{
857
    CharDriverState *chr;
858
    FDCharDriver *s;
859

    
860
    chr = g_malloc0(sizeof(CharDriverState));
861
    s = g_malloc0(sizeof(FDCharDriver));
862
    s->fd_in = io_channel_from_fd(fd_in);
863
    s->fd_out = io_channel_from_fd(fd_out);
864
    fcntl(fd_out, F_SETFL, O_NONBLOCK);
865
    s->chr = chr;
866
    chr->opaque = s;
867
    chr->chr_add_watch = fd_chr_add_watch;
868
    chr->chr_write = fd_chr_write;
869
    chr->chr_update_read_handler = fd_chr_update_read_handler;
870
    chr->chr_close = fd_chr_close;
871

    
872
    return chr;
873
}
874

    
875
static CharDriverState *qemu_chr_open_pipe(ChardevHostdev *opts)
876
{
877
    int fd_in, fd_out;
878
    char filename_in[256], filename_out[256];
879
    const char *filename = opts->device;
880

    
881
    if (filename == NULL) {
882
        fprintf(stderr, "chardev: pipe: no filename given\n");
883
        return NULL;
884
    }
885

    
886
    snprintf(filename_in, 256, "%s.in", filename);
887
    snprintf(filename_out, 256, "%s.out", filename);
888
    TFR(fd_in = qemu_open(filename_in, O_RDWR | O_BINARY));
889
    TFR(fd_out = qemu_open(filename_out, O_RDWR | O_BINARY));
890
    if (fd_in < 0 || fd_out < 0) {
891
        if (fd_in >= 0)
892
            close(fd_in);
893
        if (fd_out >= 0)
894
            close(fd_out);
895
        TFR(fd_in = fd_out = qemu_open(filename, O_RDWR | O_BINARY));
896
        if (fd_in < 0) {
897
            return NULL;
898
        }
899
    }
900
    return qemu_chr_open_fd(fd_in, fd_out);
901
}
902

    
903
/* init terminal so that we can grab keys */
904
static struct termios oldtty;
905
static int old_fd0_flags;
906
static bool stdio_allow_signal;
907

    
908
static void term_exit(void)
909
{
910
    tcsetattr (0, TCSANOW, &oldtty);
911
    fcntl(0, F_SETFL, old_fd0_flags);
912
}
913

    
914
static void qemu_chr_set_echo_stdio(CharDriverState *chr, bool echo)
915
{
916
    struct termios tty;
917

    
918
    tty = oldtty;
919
    if (!echo) {
920
        tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
921
                          |INLCR|IGNCR|ICRNL|IXON);
922
        tty.c_oflag |= OPOST;
923
        tty.c_lflag &= ~(ECHO|ECHONL|ICANON|IEXTEN);
924
        tty.c_cflag &= ~(CSIZE|PARENB);
925
        tty.c_cflag |= CS8;
926
        tty.c_cc[VMIN] = 1;
927
        tty.c_cc[VTIME] = 0;
928
    }
929
    /* if graphical mode, we allow Ctrl-C handling */
930
    if (!stdio_allow_signal)
931
        tty.c_lflag &= ~ISIG;
932

    
933
    tcsetattr (0, TCSANOW, &tty);
934
}
935

    
936
static void qemu_chr_close_stdio(struct CharDriverState *chr)
937
{
938
    term_exit();
939
    fd_chr_close(chr);
940
}
941

    
942
static CharDriverState *qemu_chr_open_stdio(ChardevStdio *opts)
943
{
944
    CharDriverState *chr;
945

    
946
    if (is_daemonized()) {
947
        error_report("cannot use stdio with -daemonize");
948
        return NULL;
949
    }
950
    old_fd0_flags = fcntl(0, F_GETFL);
951
    tcgetattr (0, &oldtty);
952
    fcntl(0, F_SETFL, O_NONBLOCK);
953
    atexit(term_exit);
954

    
955
    chr = qemu_chr_open_fd(0, 1);
956
    chr->chr_close = qemu_chr_close_stdio;
957
    chr->chr_set_echo = qemu_chr_set_echo_stdio;
958
    stdio_allow_signal = display_type != DT_NOGRAPHIC;
959
    if (opts->has_signal) {
960
        stdio_allow_signal = opts->signal;
961
    }
962
    qemu_chr_fe_set_echo(chr, false);
963

    
964
    return chr;
965
}
966

    
967
#if defined(__linux__) || defined(__sun__) || defined(__FreeBSD__) \
968
    || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) \
969
    || defined(__GLIBC__)
970

    
971
#define HAVE_CHARDEV_TTY 1
972

    
973
typedef struct {
974
    GIOChannel *fd;
975
    guint fd_tag;
976
    int connected;
977
    int read_bytes;
978
    guint timer_tag;
979
} PtyCharDriver;
980

    
981
static void pty_chr_update_read_handler(CharDriverState *chr);
982
static void pty_chr_state(CharDriverState *chr, int connected);
983

    
984
static gboolean pty_chr_timer(gpointer opaque)
985
{
986
    struct CharDriverState *chr = opaque;
987
    PtyCharDriver *s = chr->opaque;
988

    
989
    if (s->connected) {
990
        goto out;
991
    }
992

    
993
    /* Next poll ... */
994
    pty_chr_update_read_handler(chr);
995

    
996
out:
997
    s->timer_tag = 0;
998
    return FALSE;
999
}
1000

    
1001
static void pty_chr_rearm_timer(CharDriverState *chr, int ms)
1002
{
1003
    PtyCharDriver *s = chr->opaque;
1004

    
1005
    if (s->timer_tag) {
1006
        g_source_remove(s->timer_tag);
1007
        s->timer_tag = 0;
1008
    }
1009

    
1010
    if (ms == 1000) {
1011
        s->timer_tag = g_timeout_add_seconds(1, pty_chr_timer, chr);
1012
    } else {
1013
        s->timer_tag = g_timeout_add(ms, pty_chr_timer, chr);
1014
    }
1015
}
1016

    
1017
static int pty_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
1018
{
1019
    PtyCharDriver *s = chr->opaque;
1020

    
1021
    if (!s->connected) {
1022
        /* guest sends data, check for (re-)connect */
1023
        pty_chr_update_read_handler(chr);
1024
        return 0;
1025
    }
1026
    return io_channel_send(s->fd, buf, len);
1027
}
1028

    
1029
static GSource *pty_chr_add_watch(CharDriverState *chr, GIOCondition cond)
1030
{
1031
    PtyCharDriver *s = chr->opaque;
1032
    return g_io_create_watch(s->fd, cond);
1033
}
1034

    
1035
static int pty_chr_read_poll(void *opaque)
1036
{
1037
    CharDriverState *chr = opaque;
1038
    PtyCharDriver *s = chr->opaque;
1039

    
1040
    s->read_bytes = qemu_chr_be_can_write(chr);
1041
    return s->read_bytes;
1042
}
1043

    
1044
static gboolean pty_chr_read(GIOChannel *chan, GIOCondition cond, void *opaque)
1045
{
1046
    CharDriverState *chr = opaque;
1047
    PtyCharDriver *s = chr->opaque;
1048
    gsize size, len;
1049
    uint8_t buf[READ_BUF_LEN];
1050
    GIOStatus status;
1051

    
1052
    len = sizeof(buf);
1053
    if (len > s->read_bytes)
1054
        len = s->read_bytes;
1055
    if (len == 0) {
1056
        return TRUE;
1057
    }
1058
    status = g_io_channel_read_chars(s->fd, (gchar *)buf, len, &size, NULL);
1059
    if (status != G_IO_STATUS_NORMAL) {
1060
        pty_chr_state(chr, 0);
1061
        return FALSE;
1062
    } else {
1063
        pty_chr_state(chr, 1);
1064
        qemu_chr_be_write(chr, buf, size);
1065
    }
1066
    return TRUE;
1067
}
1068

    
1069
static void pty_chr_update_read_handler(CharDriverState *chr)
1070
{
1071
    PtyCharDriver *s = chr->opaque;
1072
    GPollFD pfd;
1073

    
1074
    pfd.fd = g_io_channel_unix_get_fd(s->fd);
1075
    pfd.events = G_IO_OUT;
1076
    pfd.revents = 0;
1077
    g_poll(&pfd, 1, 0);
1078
    if (pfd.revents & G_IO_HUP) {
1079
        pty_chr_state(chr, 0);
1080
    } else {
1081
        pty_chr_state(chr, 1);
1082
    }
1083
}
1084

    
1085
static void pty_chr_state(CharDriverState *chr, int connected)
1086
{
1087
    PtyCharDriver *s = chr->opaque;
1088

    
1089
    if (!connected) {
1090
        if (s->fd_tag) {
1091
            io_remove_watch_poll(s->fd_tag);
1092
            s->fd_tag = 0;
1093
        }
1094
        s->connected = 0;
1095
        /* (re-)connect poll interval for idle guests: once per second.
1096
         * We check more frequently in case the guests sends data to
1097
         * the virtual device linked to our pty. */
1098
        pty_chr_rearm_timer(chr, 1000);
1099
    } else {
1100
        if (s->timer_tag) {
1101
            g_source_remove(s->timer_tag);
1102
            s->timer_tag = 0;
1103
        }
1104
        if (!s->connected) {
1105
            qemu_chr_be_generic_open(chr);
1106
            s->connected = 1;
1107
            s->fd_tag = io_add_watch_poll(s->fd, pty_chr_read_poll, pty_chr_read, chr);
1108
        }
1109
    }
1110
}
1111

    
1112

    
1113
static void pty_chr_close(struct CharDriverState *chr)
1114
{
1115
    PtyCharDriver *s = chr->opaque;
1116
    int fd;
1117

    
1118
    if (s->fd_tag) {
1119
        io_remove_watch_poll(s->fd_tag);
1120
        s->fd_tag = 0;
1121
    }
1122
    fd = g_io_channel_unix_get_fd(s->fd);
1123
    g_io_channel_unref(s->fd);
1124
    close(fd);
1125
    if (s->timer_tag) {
1126
        g_source_remove(s->timer_tag);
1127
        s->timer_tag = 0;
1128
    }
1129
    g_free(s);
1130
    qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
1131
}
1132

    
1133
static CharDriverState *qemu_chr_open_pty(const char *id,
1134
                                          ChardevReturn *ret)
1135
{
1136
    CharDriverState *chr;
1137
    PtyCharDriver *s;
1138
    int master_fd, slave_fd;
1139
    char pty_name[PATH_MAX];
1140

    
1141
    master_fd = qemu_openpty_raw(&slave_fd, pty_name);
1142
    if (master_fd < 0) {
1143
        return NULL;
1144
    }
1145

    
1146
    close(slave_fd);
1147

    
1148
    chr = g_malloc0(sizeof(CharDriverState));
1149

    
1150
    chr->filename = g_strdup_printf("pty:%s", pty_name);
1151
    ret->pty = g_strdup(pty_name);
1152
    ret->has_pty = true;
1153

    
1154
    fprintf(stderr, "char device redirected to %s (label %s)\n",
1155
            pty_name, id);
1156

    
1157
    s = g_malloc0(sizeof(PtyCharDriver));
1158
    chr->opaque = s;
1159
    chr->chr_write = pty_chr_write;
1160
    chr->chr_update_read_handler = pty_chr_update_read_handler;
1161
    chr->chr_close = pty_chr_close;
1162
    chr->chr_add_watch = pty_chr_add_watch;
1163
    chr->explicit_be_open = true;
1164

    
1165
    s->fd = io_channel_from_fd(master_fd);
1166
    s->timer_tag = 0;
1167

    
1168
    return chr;
1169
}
1170

    
1171
static void tty_serial_init(int fd, int speed,
1172
                            int parity, int data_bits, int stop_bits)
1173
{
1174
    struct termios tty;
1175
    speed_t spd;
1176

    
1177
#if 0
1178
    printf("tty_serial_init: speed=%d parity=%c data=%d stop=%d\n",
1179
           speed, parity, data_bits, stop_bits);
1180
#endif
1181
    tcgetattr (fd, &tty);
1182

    
1183
#define check_speed(val) if (speed <= val) { spd = B##val; break; }
1184
    speed = speed * 10 / 11;
1185
    do {
1186
        check_speed(50);
1187
        check_speed(75);
1188
        check_speed(110);
1189
        check_speed(134);
1190
        check_speed(150);
1191
        check_speed(200);
1192
        check_speed(300);
1193
        check_speed(600);
1194
        check_speed(1200);
1195
        check_speed(1800);
1196
        check_speed(2400);
1197
        check_speed(4800);
1198
        check_speed(9600);
1199
        check_speed(19200);
1200
        check_speed(38400);
1201
        /* Non-Posix values follow. They may be unsupported on some systems. */
1202
        check_speed(57600);
1203
        check_speed(115200);
1204
#ifdef B230400
1205
        check_speed(230400);
1206
#endif
1207
#ifdef B460800
1208
        check_speed(460800);
1209
#endif
1210
#ifdef B500000
1211
        check_speed(500000);
1212
#endif
1213
#ifdef B576000
1214
        check_speed(576000);
1215
#endif
1216
#ifdef B921600
1217
        check_speed(921600);
1218
#endif
1219
#ifdef B1000000
1220
        check_speed(1000000);
1221
#endif
1222
#ifdef B1152000
1223
        check_speed(1152000);
1224
#endif
1225
#ifdef B1500000
1226
        check_speed(1500000);
1227
#endif
1228
#ifdef B2000000
1229
        check_speed(2000000);
1230
#endif
1231
#ifdef B2500000
1232
        check_speed(2500000);
1233
#endif
1234
#ifdef B3000000
1235
        check_speed(3000000);
1236
#endif
1237
#ifdef B3500000
1238
        check_speed(3500000);
1239
#endif
1240
#ifdef B4000000
1241
        check_speed(4000000);
1242
#endif
1243
        spd = B115200;
1244
    } while (0);
1245

    
1246
    cfsetispeed(&tty, spd);
1247
    cfsetospeed(&tty, spd);
1248

    
1249
    tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
1250
                          |INLCR|IGNCR|ICRNL|IXON);
1251
    tty.c_oflag |= OPOST;
1252
    tty.c_lflag &= ~(ECHO|ECHONL|ICANON|IEXTEN|ISIG);
1253
    tty.c_cflag &= ~(CSIZE|PARENB|PARODD|CRTSCTS|CSTOPB);
1254
    switch(data_bits) {
1255
    default:
1256
    case 8:
1257
        tty.c_cflag |= CS8;
1258
        break;
1259
    case 7:
1260
        tty.c_cflag |= CS7;
1261
        break;
1262
    case 6:
1263
        tty.c_cflag |= CS6;
1264
        break;
1265
    case 5:
1266
        tty.c_cflag |= CS5;
1267
        break;
1268
    }
1269
    switch(parity) {
1270
    default:
1271
    case 'N':
1272
        break;
1273
    case 'E':
1274
        tty.c_cflag |= PARENB;
1275
        break;
1276
    case 'O':
1277
        tty.c_cflag |= PARENB | PARODD;
1278
        break;
1279
    }
1280
    if (stop_bits == 2)
1281
        tty.c_cflag |= CSTOPB;
1282

    
1283
    tcsetattr (fd, TCSANOW, &tty);
1284
}
1285

    
1286
static int tty_serial_ioctl(CharDriverState *chr, int cmd, void *arg)
1287
{
1288
    FDCharDriver *s = chr->opaque;
1289

    
1290
    switch(cmd) {
1291
    case CHR_IOCTL_SERIAL_SET_PARAMS:
1292
        {
1293
            QEMUSerialSetParams *ssp = arg;
1294
            tty_serial_init(g_io_channel_unix_get_fd(s->fd_in),
1295
                            ssp->speed, ssp->parity,
1296
                            ssp->data_bits, ssp->stop_bits);
1297
        }
1298
        break;
1299
    case CHR_IOCTL_SERIAL_SET_BREAK:
1300
        {
1301
            int enable = *(int *)arg;
1302
            if (enable) {
1303
                tcsendbreak(g_io_channel_unix_get_fd(s->fd_in), 1);
1304
            }
1305
        }
1306
        break;
1307
    case CHR_IOCTL_SERIAL_GET_TIOCM:
1308
        {
1309
            int sarg = 0;
1310
            int *targ = (int *)arg;
1311
            ioctl(g_io_channel_unix_get_fd(s->fd_in), TIOCMGET, &sarg);
1312
            *targ = 0;
1313
            if (sarg & TIOCM_CTS)
1314
                *targ |= CHR_TIOCM_CTS;
1315
            if (sarg & TIOCM_CAR)
1316
                *targ |= CHR_TIOCM_CAR;
1317
            if (sarg & TIOCM_DSR)
1318
                *targ |= CHR_TIOCM_DSR;
1319
            if (sarg & TIOCM_RI)
1320
                *targ |= CHR_TIOCM_RI;
1321
            if (sarg & TIOCM_DTR)
1322
                *targ |= CHR_TIOCM_DTR;
1323
            if (sarg & TIOCM_RTS)
1324
                *targ |= CHR_TIOCM_RTS;
1325
        }
1326
        break;
1327
    case CHR_IOCTL_SERIAL_SET_TIOCM:
1328
        {
1329
            int sarg = *(int *)arg;
1330
            int targ = 0;
1331
            ioctl(g_io_channel_unix_get_fd(s->fd_in), TIOCMGET, &targ);
1332
            targ &= ~(CHR_TIOCM_CTS | CHR_TIOCM_CAR | CHR_TIOCM_DSR
1333
                     | CHR_TIOCM_RI | CHR_TIOCM_DTR | CHR_TIOCM_RTS);
1334
            if (sarg & CHR_TIOCM_CTS)
1335
                targ |= TIOCM_CTS;
1336
            if (sarg & CHR_TIOCM_CAR)
1337
                targ |= TIOCM_CAR;
1338
            if (sarg & CHR_TIOCM_DSR)
1339
                targ |= TIOCM_DSR;
1340
            if (sarg & CHR_TIOCM_RI)
1341
                targ |= TIOCM_RI;
1342
            if (sarg & CHR_TIOCM_DTR)
1343
                targ |= TIOCM_DTR;
1344
            if (sarg & CHR_TIOCM_RTS)
1345
                targ |= TIOCM_RTS;
1346
            ioctl(g_io_channel_unix_get_fd(s->fd_in), TIOCMSET, &targ);
1347
        }
1348
        break;
1349
    default:
1350
        return -ENOTSUP;
1351
    }
1352
    return 0;
1353
}
1354

    
1355
static void qemu_chr_close_tty(CharDriverState *chr)
1356
{
1357
    FDCharDriver *s = chr->opaque;
1358
    int fd = -1;
1359

    
1360
    if (s) {
1361
        fd = g_io_channel_unix_get_fd(s->fd_in);
1362
    }
1363

    
1364
    fd_chr_close(chr);
1365

    
1366
    if (fd >= 0) {
1367
        close(fd);
1368
    }
1369
}
1370

    
1371
static CharDriverState *qemu_chr_open_tty_fd(int fd)
1372
{
1373
    CharDriverState *chr;
1374

    
1375
    tty_serial_init(fd, 115200, 'N', 8, 1);
1376
    chr = qemu_chr_open_fd(fd, fd);
1377
    chr->chr_ioctl = tty_serial_ioctl;
1378
    chr->chr_close = qemu_chr_close_tty;
1379
    return chr;
1380
}
1381
#endif /* __linux__ || __sun__ */
1382

    
1383
#if defined(__linux__)
1384

    
1385
#define HAVE_CHARDEV_PARPORT 1
1386

    
1387
typedef struct {
1388
    int fd;
1389
    int mode;
1390
} ParallelCharDriver;
1391

    
1392
static int pp_hw_mode(ParallelCharDriver *s, uint16_t mode)
1393
{
1394
    if (s->mode != mode) {
1395
        int m = mode;
1396
        if (ioctl(s->fd, PPSETMODE, &m) < 0)
1397
            return 0;
1398
        s->mode = mode;
1399
    }
1400
    return 1;
1401
}
1402

    
1403
static int pp_ioctl(CharDriverState *chr, int cmd, void *arg)
1404
{
1405
    ParallelCharDriver *drv = chr->opaque;
1406
    int fd = drv->fd;
1407
    uint8_t b;
1408

    
1409
    switch(cmd) {
1410
    case CHR_IOCTL_PP_READ_DATA:
1411
        if (ioctl(fd, PPRDATA, &b) < 0)
1412
            return -ENOTSUP;
1413
        *(uint8_t *)arg = b;
1414
        break;
1415
    case CHR_IOCTL_PP_WRITE_DATA:
1416
        b = *(uint8_t *)arg;
1417
        if (ioctl(fd, PPWDATA, &b) < 0)
1418
            return -ENOTSUP;
1419
        break;
1420
    case CHR_IOCTL_PP_READ_CONTROL:
1421
        if (ioctl(fd, PPRCONTROL, &b) < 0)
1422
            return -ENOTSUP;
1423
        /* Linux gives only the lowest bits, and no way to know data
1424
           direction! For better compatibility set the fixed upper
1425
           bits. */
1426
        *(uint8_t *)arg = b | 0xc0;
1427
        break;
1428
    case CHR_IOCTL_PP_WRITE_CONTROL:
1429
        b = *(uint8_t *)arg;
1430
        if (ioctl(fd, PPWCONTROL, &b) < 0)
1431
            return -ENOTSUP;
1432
        break;
1433
    case CHR_IOCTL_PP_READ_STATUS:
1434
        if (ioctl(fd, PPRSTATUS, &b) < 0)
1435
            return -ENOTSUP;
1436
        *(uint8_t *)arg = b;
1437
        break;
1438
    case CHR_IOCTL_PP_DATA_DIR:
1439
        if (ioctl(fd, PPDATADIR, (int *)arg) < 0)
1440
            return -ENOTSUP;
1441
        break;
1442
    case CHR_IOCTL_PP_EPP_READ_ADDR:
1443
        if (pp_hw_mode(drv, IEEE1284_MODE_EPP|IEEE1284_ADDR)) {
1444
            struct ParallelIOArg *parg = arg;
1445
            int n = read(fd, parg->buffer, parg->count);
1446
            if (n != parg->count) {
1447
                return -EIO;
1448
            }
1449
        }
1450
        break;
1451
    case CHR_IOCTL_PP_EPP_READ:
1452
        if (pp_hw_mode(drv, IEEE1284_MODE_EPP)) {
1453
            struct ParallelIOArg *parg = arg;
1454
            int n = read(fd, parg->buffer, parg->count);
1455
            if (n != parg->count) {
1456
                return -EIO;
1457
            }
1458
        }
1459
        break;
1460
    case CHR_IOCTL_PP_EPP_WRITE_ADDR:
1461
        if (pp_hw_mode(drv, IEEE1284_MODE_EPP|IEEE1284_ADDR)) {
1462
            struct ParallelIOArg *parg = arg;
1463
            int n = write(fd, parg->buffer, parg->count);
1464
            if (n != parg->count) {
1465
                return -EIO;
1466
            }
1467
        }
1468
        break;
1469
    case CHR_IOCTL_PP_EPP_WRITE:
1470
        if (pp_hw_mode(drv, IEEE1284_MODE_EPP)) {
1471
            struct ParallelIOArg *parg = arg;
1472
            int n = write(fd, parg->buffer, parg->count);
1473
            if (n != parg->count) {
1474
                return -EIO;
1475
            }
1476
        }
1477
        break;
1478
    default:
1479
        return -ENOTSUP;
1480
    }
1481
    return 0;
1482
}
1483

    
1484
static void pp_close(CharDriverState *chr)
1485
{
1486
    ParallelCharDriver *drv = chr->opaque;
1487
    int fd = drv->fd;
1488

    
1489
    pp_hw_mode(drv, IEEE1284_MODE_COMPAT);
1490
    ioctl(fd, PPRELEASE);
1491
    close(fd);
1492
    g_free(drv);
1493
    qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
1494
}
1495

    
1496
static CharDriverState *qemu_chr_open_pp_fd(int fd)
1497
{
1498
    CharDriverState *chr;
1499
    ParallelCharDriver *drv;
1500

    
1501
    if (ioctl(fd, PPCLAIM) < 0) {
1502
        close(fd);
1503
        return NULL;
1504
    }
1505

    
1506
    drv = g_malloc0(sizeof(ParallelCharDriver));
1507
    drv->fd = fd;
1508
    drv->mode = IEEE1284_MODE_COMPAT;
1509

    
1510
    chr = g_malloc0(sizeof(CharDriverState));
1511
    chr->chr_write = null_chr_write;
1512
    chr->chr_ioctl = pp_ioctl;
1513
    chr->chr_close = pp_close;
1514
    chr->opaque = drv;
1515

    
1516
    return chr;
1517
}
1518
#endif /* __linux__ */
1519

    
1520
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
1521

    
1522
#define HAVE_CHARDEV_PARPORT 1
1523

    
1524
static int pp_ioctl(CharDriverState *chr, int cmd, void *arg)
1525
{
1526
    int fd = (int)(intptr_t)chr->opaque;
1527
    uint8_t b;
1528

    
1529
    switch(cmd) {
1530
    case CHR_IOCTL_PP_READ_DATA:
1531
        if (ioctl(fd, PPIGDATA, &b) < 0)
1532
            return -ENOTSUP;
1533
        *(uint8_t *)arg = b;
1534
        break;
1535
    case CHR_IOCTL_PP_WRITE_DATA:
1536
        b = *(uint8_t *)arg;
1537
        if (ioctl(fd, PPISDATA, &b) < 0)
1538
            return -ENOTSUP;
1539
        break;
1540
    case CHR_IOCTL_PP_READ_CONTROL:
1541
        if (ioctl(fd, PPIGCTRL, &b) < 0)
1542
            return -ENOTSUP;
1543
        *(uint8_t *)arg = b;
1544
        break;
1545
    case CHR_IOCTL_PP_WRITE_CONTROL:
1546
        b = *(uint8_t *)arg;
1547
        if (ioctl(fd, PPISCTRL, &b) < 0)
1548
            return -ENOTSUP;
1549
        break;
1550
    case CHR_IOCTL_PP_READ_STATUS:
1551
        if (ioctl(fd, PPIGSTATUS, &b) < 0)
1552
            return -ENOTSUP;
1553
        *(uint8_t *)arg = b;
1554
        break;
1555
    default:
1556
        return -ENOTSUP;
1557
    }
1558
    return 0;
1559
}
1560

    
1561
static CharDriverState *qemu_chr_open_pp_fd(int fd)
1562
{
1563
    CharDriverState *chr;
1564

    
1565
    chr = g_malloc0(sizeof(CharDriverState));
1566
    chr->opaque = (void *)(intptr_t)fd;
1567
    chr->chr_write = null_chr_write;
1568
    chr->chr_ioctl = pp_ioctl;
1569
    chr->explicit_be_open = true;
1570
    return chr;
1571
}
1572
#endif
1573

    
1574
#else /* _WIN32 */
1575

    
1576
typedef struct {
1577
    int max_size;
1578
    HANDLE hcom, hrecv, hsend;
1579
    OVERLAPPED orecv, osend;
1580
    BOOL fpipe;
1581
    DWORD len;
1582
} WinCharState;
1583

    
1584
typedef struct {
1585
    HANDLE  hStdIn;
1586
    HANDLE  hInputReadyEvent;
1587
    HANDLE  hInputDoneEvent;
1588
    HANDLE  hInputThread;
1589
    uint8_t win_stdio_buf;
1590
} WinStdioCharState;
1591

    
1592
#define NSENDBUF 2048
1593
#define NRECVBUF 2048
1594
#define MAXCONNECT 1
1595
#define NTIMEOUT 5000
1596

    
1597
static int win_chr_poll(void *opaque);
1598
static int win_chr_pipe_poll(void *opaque);
1599

    
1600
static void win_chr_close(CharDriverState *chr)
1601
{
1602
    WinCharState *s = chr->opaque;
1603

    
1604
    if (s->hsend) {
1605
        CloseHandle(s->hsend);
1606
        s->hsend = NULL;
1607
    }
1608
    if (s->hrecv) {
1609
        CloseHandle(s->hrecv);
1610
        s->hrecv = NULL;
1611
    }
1612
    if (s->hcom) {
1613
        CloseHandle(s->hcom);
1614
        s->hcom = NULL;
1615
    }
1616
    if (s->fpipe)
1617
        qemu_del_polling_cb(win_chr_pipe_poll, chr);
1618
    else
1619
        qemu_del_polling_cb(win_chr_poll, chr);
1620

    
1621
    qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
1622
}
1623

    
1624
static int win_chr_init(CharDriverState *chr, const char *filename)
1625
{
1626
    WinCharState *s = chr->opaque;
1627
    COMMCONFIG comcfg;
1628
    COMMTIMEOUTS cto = { 0, 0, 0, 0, 0};
1629
    COMSTAT comstat;
1630
    DWORD size;
1631
    DWORD err;
1632

    
1633
    s->hsend = CreateEvent(NULL, TRUE, FALSE, NULL);
1634
    if (!s->hsend) {
1635
        fprintf(stderr, "Failed CreateEvent\n");
1636
        goto fail;
1637
    }
1638
    s->hrecv = CreateEvent(NULL, TRUE, FALSE, NULL);
1639
    if (!s->hrecv) {
1640
        fprintf(stderr, "Failed CreateEvent\n");
1641
        goto fail;
1642
    }
1643

    
1644
    s->hcom = CreateFile(filename, GENERIC_READ|GENERIC_WRITE, 0, NULL,
1645
                      OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
1646
    if (s->hcom == INVALID_HANDLE_VALUE) {
1647
        fprintf(stderr, "Failed CreateFile (%lu)\n", GetLastError());
1648
        s->hcom = NULL;
1649
        goto fail;
1650
    }
1651

    
1652
    if (!SetupComm(s->hcom, NRECVBUF, NSENDBUF)) {
1653
        fprintf(stderr, "Failed SetupComm\n");
1654
        goto fail;
1655
    }
1656

    
1657
    ZeroMemory(&comcfg, sizeof(COMMCONFIG));
1658
    size = sizeof(COMMCONFIG);
1659
    GetDefaultCommConfig(filename, &comcfg, &size);
1660
    comcfg.dcb.DCBlength = sizeof(DCB);
1661
    CommConfigDialog(filename, NULL, &comcfg);
1662

    
1663
    if (!SetCommState(s->hcom, &comcfg.dcb)) {
1664
        fprintf(stderr, "Failed SetCommState\n");
1665
        goto fail;
1666
    }
1667

    
1668
    if (!SetCommMask(s->hcom, EV_ERR)) {
1669
        fprintf(stderr, "Failed SetCommMask\n");
1670
        goto fail;
1671
    }
1672

    
1673
    cto.ReadIntervalTimeout = MAXDWORD;
1674
    if (!SetCommTimeouts(s->hcom, &cto)) {
1675
        fprintf(stderr, "Failed SetCommTimeouts\n");
1676
        goto fail;
1677
    }
1678

    
1679
    if (!ClearCommError(s->hcom, &err, &comstat)) {
1680
        fprintf(stderr, "Failed ClearCommError\n");
1681
        goto fail;
1682
    }
1683
    qemu_add_polling_cb(win_chr_poll, chr);
1684
    return 0;
1685

    
1686
 fail:
1687
    win_chr_close(chr);
1688
    return -1;
1689
}
1690

    
1691
static int win_chr_write(CharDriverState *chr, const uint8_t *buf, int len1)
1692
{
1693
    WinCharState *s = chr->opaque;
1694
    DWORD len, ret, size, err;
1695

    
1696
    len = len1;
1697
    ZeroMemory(&s->osend, sizeof(s->osend));
1698
    s->osend.hEvent = s->hsend;
1699
    while (len > 0) {
1700
        if (s->hsend)
1701
            ret = WriteFile(s->hcom, buf, len, &size, &s->osend);
1702
        else
1703
            ret = WriteFile(s->hcom, buf, len, &size, NULL);
1704
        if (!ret) {
1705
            err = GetLastError();
1706
            if (err == ERROR_IO_PENDING) {
1707
                ret = GetOverlappedResult(s->hcom, &s->osend, &size, TRUE);
1708
                if (ret) {
1709
                    buf += size;
1710
                    len -= size;
1711
                } else {
1712
                    break;
1713
                }
1714
            } else {
1715
                break;
1716
            }
1717
        } else {
1718
            buf += size;
1719
            len -= size;
1720
        }
1721
    }
1722
    return len1 - len;
1723
}
1724

    
1725
static int win_chr_read_poll(CharDriverState *chr)
1726
{
1727
    WinCharState *s = chr->opaque;
1728

    
1729
    s->max_size = qemu_chr_be_can_write(chr);
1730
    return s->max_size;
1731
}
1732

    
1733
static void win_chr_readfile(CharDriverState *chr)
1734
{
1735
    WinCharState *s = chr->opaque;
1736
    int ret, err;
1737
    uint8_t buf[READ_BUF_LEN];
1738
    DWORD size;
1739

    
1740
    ZeroMemory(&s->orecv, sizeof(s->orecv));
1741
    s->orecv.hEvent = s->hrecv;
1742
    ret = ReadFile(s->hcom, buf, s->len, &size, &s->orecv);
1743
    if (!ret) {
1744
        err = GetLastError();
1745
        if (err == ERROR_IO_PENDING) {
1746
            ret = GetOverlappedResult(s->hcom, &s->orecv, &size, TRUE);
1747
        }
1748
    }
1749

    
1750
    if (size > 0) {
1751
        qemu_chr_be_write(chr, buf, size);
1752
    }
1753
}
1754

    
1755
static void win_chr_read(CharDriverState *chr)
1756
{
1757
    WinCharState *s = chr->opaque;
1758

    
1759
    if (s->len > s->max_size)
1760
        s->len = s->max_size;
1761
    if (s->len == 0)
1762
        return;
1763

    
1764
    win_chr_readfile(chr);
1765
}
1766

    
1767
static int win_chr_poll(void *opaque)
1768
{
1769
    CharDriverState *chr = opaque;
1770
    WinCharState *s = chr->opaque;
1771
    COMSTAT status;
1772
    DWORD comerr;
1773

    
1774
    ClearCommError(s->hcom, &comerr, &status);
1775
    if (status.cbInQue > 0) {
1776
        s->len = status.cbInQue;
1777
        win_chr_read_poll(chr);
1778
        win_chr_read(chr);
1779
        return 1;
1780
    }
1781
    return 0;
1782
}
1783

    
1784
static CharDriverState *qemu_chr_open_win_path(const char *filename)
1785
{
1786
    CharDriverState *chr;
1787
    WinCharState *s;
1788

    
1789
    chr = g_malloc0(sizeof(CharDriverState));
1790
    s = g_malloc0(sizeof(WinCharState));
1791
    chr->opaque = s;
1792
    chr->chr_write = win_chr_write;
1793
    chr->chr_close = win_chr_close;
1794

    
1795
    if (win_chr_init(chr, filename) < 0) {
1796
        g_free(s);
1797
        g_free(chr);
1798
        return NULL;
1799
    }
1800
    return chr;
1801
}
1802

    
1803
static int win_chr_pipe_poll(void *opaque)
1804
{
1805
    CharDriverState *chr = opaque;
1806
    WinCharState *s = chr->opaque;
1807
    DWORD size;
1808

    
1809
    PeekNamedPipe(s->hcom, NULL, 0, NULL, &size, NULL);
1810
    if (size > 0) {
1811
        s->len = size;
1812
        win_chr_read_poll(chr);
1813
        win_chr_read(chr);
1814
        return 1;
1815
    }
1816
    return 0;
1817
}
1818

    
1819
static int win_chr_pipe_init(CharDriverState *chr, const char *filename)
1820
{
1821
    WinCharState *s = chr->opaque;
1822
    OVERLAPPED ov;
1823
    int ret;
1824
    DWORD size;
1825
    char openname[256];
1826

    
1827
    s->fpipe = TRUE;
1828

    
1829
    s->hsend = CreateEvent(NULL, TRUE, FALSE, NULL);
1830
    if (!s->hsend) {
1831
        fprintf(stderr, "Failed CreateEvent\n");
1832
        goto fail;
1833
    }
1834
    s->hrecv = CreateEvent(NULL, TRUE, FALSE, NULL);
1835
    if (!s->hrecv) {
1836
        fprintf(stderr, "Failed CreateEvent\n");
1837
        goto fail;
1838
    }
1839

    
1840
    snprintf(openname, sizeof(openname), "\\\\.\\pipe\\%s", filename);
1841
    s->hcom = CreateNamedPipe(openname, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
1842
                              PIPE_TYPE_BYTE | PIPE_READMODE_BYTE |
1843
                              PIPE_WAIT,
1844
                              MAXCONNECT, NSENDBUF, NRECVBUF, NTIMEOUT, NULL);
1845
    if (s->hcom == INVALID_HANDLE_VALUE) {
1846
        fprintf(stderr, "Failed CreateNamedPipe (%lu)\n", GetLastError());
1847
        s->hcom = NULL;
1848
        goto fail;
1849
    }
1850

    
1851
    ZeroMemory(&ov, sizeof(ov));
1852
    ov.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
1853
    ret = ConnectNamedPipe(s->hcom, &ov);
1854
    if (ret) {
1855
        fprintf(stderr, "Failed ConnectNamedPipe\n");
1856
        goto fail;
1857
    }
1858

    
1859
    ret = GetOverlappedResult(s->hcom, &ov, &size, TRUE);
1860
    if (!ret) {
1861
        fprintf(stderr, "Failed GetOverlappedResult\n");
1862
        if (ov.hEvent) {
1863
            CloseHandle(ov.hEvent);
1864
            ov.hEvent = NULL;
1865
        }
1866
        goto fail;
1867
    }
1868

    
1869
    if (ov.hEvent) {
1870
        CloseHandle(ov.hEvent);
1871
        ov.hEvent = NULL;
1872
    }
1873
    qemu_add_polling_cb(win_chr_pipe_poll, chr);
1874
    return 0;
1875

    
1876
 fail:
1877
    win_chr_close(chr);
1878
    return -1;
1879
}
1880

    
1881

    
1882
static CharDriverState *qemu_chr_open_pipe(ChardevHostdev *opts)
1883
{
1884
    const char *filename = opts->device;
1885
    CharDriverState *chr;
1886
    WinCharState *s;
1887

    
1888
    chr = g_malloc0(sizeof(CharDriverState));
1889
    s = g_malloc0(sizeof(WinCharState));
1890
    chr->opaque = s;
1891
    chr->chr_write = win_chr_write;
1892
    chr->chr_close = win_chr_close;
1893

    
1894
    if (win_chr_pipe_init(chr, filename) < 0) {
1895
        g_free(s);
1896
        g_free(chr);
1897
        return NULL;
1898
    }
1899
    return chr;
1900
}
1901

    
1902
static CharDriverState *qemu_chr_open_win_file(HANDLE fd_out)
1903
{
1904
    CharDriverState *chr;
1905
    WinCharState *s;
1906

    
1907
    chr = g_malloc0(sizeof(CharDriverState));
1908
    s = g_malloc0(sizeof(WinCharState));
1909
    s->hcom = fd_out;
1910
    chr->opaque = s;
1911
    chr->chr_write = win_chr_write;
1912
    return chr;
1913
}
1914

    
1915
static CharDriverState *qemu_chr_open_win_con(void)
1916
{
1917
    return qemu_chr_open_win_file(GetStdHandle(STD_OUTPUT_HANDLE));
1918
}
1919

    
1920
static int win_stdio_write(CharDriverState *chr, const uint8_t *buf, int len)
1921
{
1922
    HANDLE  hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
1923
    DWORD   dwSize;
1924
    int     len1;
1925

    
1926
    len1 = len;
1927

    
1928
    while (len1 > 0) {
1929
        if (!WriteFile(hStdOut, buf, len1, &dwSize, NULL)) {
1930
            break;
1931
        }
1932
        buf  += dwSize;
1933
        len1 -= dwSize;
1934
    }
1935

    
1936
    return len - len1;
1937
}
1938

    
1939
static void win_stdio_wait_func(void *opaque)
1940
{
1941
    CharDriverState   *chr   = opaque;
1942
    WinStdioCharState *stdio = chr->opaque;
1943
    INPUT_RECORD       buf[4];
1944
    int                ret;
1945
    DWORD              dwSize;
1946
    int                i;
1947

    
1948
    ret = ReadConsoleInput(stdio->hStdIn, buf, sizeof(buf) / sizeof(*buf),
1949
                           &dwSize);
1950

    
1951
    if (!ret) {
1952
        /* Avoid error storm */
1953
        qemu_del_wait_object(stdio->hStdIn, NULL, NULL);
1954
        return;
1955
    }
1956

    
1957
    for (i = 0; i < dwSize; i++) {
1958
        KEY_EVENT_RECORD *kev = &buf[i].Event.KeyEvent;
1959

    
1960
        if (buf[i].EventType == KEY_EVENT && kev->bKeyDown) {
1961
            int j;
1962
            if (kev->uChar.AsciiChar != 0) {
1963
                for (j = 0; j < kev->wRepeatCount; j++) {
1964
                    if (qemu_chr_be_can_write(chr)) {
1965
                        uint8_t c = kev->uChar.AsciiChar;
1966
                        qemu_chr_be_write(chr, &c, 1);
1967
                    }
1968
                }
1969
            }
1970
        }
1971
    }
1972
}
1973

    
1974
static DWORD WINAPI win_stdio_thread(LPVOID param)
1975
{
1976
    CharDriverState   *chr   = param;
1977
    WinStdioCharState *stdio = chr->opaque;
1978
    int                ret;
1979
    DWORD              dwSize;
1980

    
1981
    while (1) {
1982

    
1983
        /* Wait for one byte */
1984
        ret = ReadFile(stdio->hStdIn, &stdio->win_stdio_buf, 1, &dwSize, NULL);
1985

    
1986
        /* Exit in case of error, continue if nothing read */
1987
        if (!ret) {
1988
            break;
1989
        }
1990
        if (!dwSize) {
1991
            continue;
1992
        }
1993

    
1994
        /* Some terminal emulator returns \r\n for Enter, just pass \n */
1995
        if (stdio->win_stdio_buf == '\r') {
1996
            continue;
1997
        }
1998

    
1999
        /* Signal the main thread and wait until the byte was eaten */
2000
        if (!SetEvent(stdio->hInputReadyEvent)) {
2001
            break;
2002
        }
2003
        if (WaitForSingleObject(stdio->hInputDoneEvent, INFINITE)
2004
            != WAIT_OBJECT_0) {
2005
            break;
2006
        }
2007
    }
2008

    
2009
    qemu_del_wait_object(stdio->hInputReadyEvent, NULL, NULL);
2010
    return 0;
2011
}
2012

    
2013
static void win_stdio_thread_wait_func(void *opaque)
2014
{
2015
    CharDriverState   *chr   = opaque;
2016
    WinStdioCharState *stdio = chr->opaque;
2017

    
2018
    if (qemu_chr_be_can_write(chr)) {
2019
        qemu_chr_be_write(chr, &stdio->win_stdio_buf, 1);
2020
    }
2021

    
2022
    SetEvent(stdio->hInputDoneEvent);
2023
}
2024

    
2025
static void qemu_chr_set_echo_win_stdio(CharDriverState *chr, bool echo)
2026
{
2027
    WinStdioCharState *stdio  = chr->opaque;
2028
    DWORD              dwMode = 0;
2029

    
2030
    GetConsoleMode(stdio->hStdIn, &dwMode);
2031

    
2032
    if (echo) {
2033
        SetConsoleMode(stdio->hStdIn, dwMode | ENABLE_ECHO_INPUT);
2034
    } else {
2035
        SetConsoleMode(stdio->hStdIn, dwMode & ~ENABLE_ECHO_INPUT);
2036
    }
2037
}
2038

    
2039
static void win_stdio_close(CharDriverState *chr)
2040
{
2041
    WinStdioCharState *stdio = chr->opaque;
2042

    
2043
    if (stdio->hInputReadyEvent != INVALID_HANDLE_VALUE) {
2044
        CloseHandle(stdio->hInputReadyEvent);
2045
    }
2046
    if (stdio->hInputDoneEvent != INVALID_HANDLE_VALUE) {
2047
        CloseHandle(stdio->hInputDoneEvent);
2048
    }
2049
    if (stdio->hInputThread != INVALID_HANDLE_VALUE) {
2050
        TerminateThread(stdio->hInputThread, 0);
2051
    }
2052

    
2053
    g_free(chr->opaque);
2054
    g_free(chr);
2055
}
2056

    
2057
static CharDriverState *qemu_chr_open_stdio(ChardevStdio *opts)
2058
{
2059
    CharDriverState   *chr;
2060
    WinStdioCharState *stdio;
2061
    DWORD              dwMode;
2062
    int                is_console = 0;
2063

    
2064
    chr   = g_malloc0(sizeof(CharDriverState));
2065
    stdio = g_malloc0(sizeof(WinStdioCharState));
2066

    
2067
    stdio->hStdIn = GetStdHandle(STD_INPUT_HANDLE);
2068
    if (stdio->hStdIn == INVALID_HANDLE_VALUE) {
2069
        fprintf(stderr, "cannot open stdio: invalid handle\n");
2070
        exit(1);
2071
    }
2072

    
2073
    is_console = GetConsoleMode(stdio->hStdIn, &dwMode) != 0;
2074

    
2075
    chr->opaque    = stdio;
2076
    chr->chr_write = win_stdio_write;
2077
    chr->chr_close = win_stdio_close;
2078

    
2079
    if (is_console) {
2080
        if (qemu_add_wait_object(stdio->hStdIn,
2081
                                 win_stdio_wait_func, chr)) {
2082
            fprintf(stderr, "qemu_add_wait_object: failed\n");
2083
        }
2084
    } else {
2085
        DWORD   dwId;
2086
            
2087
        stdio->hInputReadyEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
2088
        stdio->hInputDoneEvent  = CreateEvent(NULL, FALSE, FALSE, NULL);
2089
        stdio->hInputThread     = CreateThread(NULL, 0, win_stdio_thread,
2090
                                               chr, 0, &dwId);
2091

    
2092
        if (stdio->hInputThread == INVALID_HANDLE_VALUE
2093
            || stdio->hInputReadyEvent == INVALID_HANDLE_VALUE
2094
            || stdio->hInputDoneEvent == INVALID_HANDLE_VALUE) {
2095
            fprintf(stderr, "cannot create stdio thread or event\n");
2096
            exit(1);
2097
        }
2098
        if (qemu_add_wait_object(stdio->hInputReadyEvent,
2099
                                 win_stdio_thread_wait_func, chr)) {
2100
            fprintf(stderr, "qemu_add_wait_object: failed\n");
2101
        }
2102
    }
2103

    
2104
    dwMode |= ENABLE_LINE_INPUT;
2105

    
2106
    if (is_console) {
2107
        /* set the terminal in raw mode */
2108
        /* ENABLE_QUICK_EDIT_MODE | ENABLE_EXTENDED_FLAGS */
2109
        dwMode |= ENABLE_PROCESSED_INPUT;
2110
    }
2111

    
2112
    SetConsoleMode(stdio->hStdIn, dwMode);
2113

    
2114
    chr->chr_set_echo = qemu_chr_set_echo_win_stdio;
2115
    qemu_chr_fe_set_echo(chr, false);
2116

    
2117
    return chr;
2118
}
2119
#endif /* !_WIN32 */
2120

    
2121

    
2122
/***********************************************************/
2123
/* UDP Net console */
2124

    
2125
typedef struct {
2126
    int fd;
2127
    GIOChannel *chan;
2128
    guint tag;
2129
    uint8_t buf[READ_BUF_LEN];
2130
    int bufcnt;
2131
    int bufptr;
2132
    int max_size;
2133
} NetCharDriver;
2134

    
2135
static int udp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
2136
{
2137
    NetCharDriver *s = chr->opaque;
2138
    gsize bytes_written;
2139
    GIOStatus status;
2140

    
2141
    status = g_io_channel_write_chars(s->chan, (const gchar *)buf, len, &bytes_written, NULL);
2142
    if (status == G_IO_STATUS_EOF) {
2143
        return 0;
2144
    } else if (status != G_IO_STATUS_NORMAL) {
2145
        return -1;
2146
    }
2147

    
2148
    return bytes_written;
2149
}
2150

    
2151
static int udp_chr_read_poll(void *opaque)
2152
{
2153
    CharDriverState *chr = opaque;
2154
    NetCharDriver *s = chr->opaque;
2155

    
2156
    s->max_size = qemu_chr_be_can_write(chr);
2157

    
2158
    /* If there were any stray characters in the queue process them
2159
     * first
2160
     */
2161
    while (s->max_size > 0 && s->bufptr < s->bufcnt) {
2162
        qemu_chr_be_write(chr, &s->buf[s->bufptr], 1);
2163
        s->bufptr++;
2164
        s->max_size = qemu_chr_be_can_write(chr);
2165
    }
2166
    return s->max_size;
2167
}
2168

    
2169
static gboolean udp_chr_read(GIOChannel *chan, GIOCondition cond, void *opaque)
2170
{
2171
    CharDriverState *chr = opaque;
2172
    NetCharDriver *s = chr->opaque;
2173
    gsize bytes_read = 0;
2174
    GIOStatus status;
2175

    
2176
    if (s->max_size == 0) {
2177
        return TRUE;
2178
    }
2179
    status = g_io_channel_read_chars(s->chan, (gchar *)s->buf, sizeof(s->buf),
2180
                                     &bytes_read, NULL);
2181
    s->bufcnt = bytes_read;
2182
    s->bufptr = s->bufcnt;
2183
    if (status != G_IO_STATUS_NORMAL) {
2184
        if (s->tag) {
2185
            io_remove_watch_poll(s->tag);
2186
            s->tag = 0;
2187
        }
2188
        return FALSE;
2189
    }
2190

    
2191
    s->bufptr = 0;
2192
    while (s->max_size > 0 && s->bufptr < s->bufcnt) {
2193
        qemu_chr_be_write(chr, &s->buf[s->bufptr], 1);
2194
        s->bufptr++;
2195
        s->max_size = qemu_chr_be_can_write(chr);
2196
    }
2197

    
2198
    return TRUE;
2199
}
2200

    
2201
static void udp_chr_update_read_handler(CharDriverState *chr)
2202
{
2203
    NetCharDriver *s = chr->opaque;
2204

    
2205
    if (s->tag) {
2206
        io_remove_watch_poll(s->tag);
2207
        s->tag = 0;
2208
    }
2209

    
2210
    if (s->chan) {
2211
        s->tag = io_add_watch_poll(s->chan, udp_chr_read_poll, udp_chr_read, chr);
2212
    }
2213
}
2214

    
2215
static void udp_chr_close(CharDriverState *chr)
2216
{
2217
    NetCharDriver *s = chr->opaque;
2218
    if (s->tag) {
2219
        io_remove_watch_poll(s->tag);
2220
        s->tag = 0;
2221
    }
2222
    if (s->chan) {
2223
        g_io_channel_unref(s->chan);
2224
        closesocket(s->fd);
2225
    }
2226
    g_free(s);
2227
    qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
2228
}
2229

    
2230
static CharDriverState *qemu_chr_open_udp_fd(int fd)
2231
{
2232
    CharDriverState *chr = NULL;
2233
    NetCharDriver *s = NULL;
2234

    
2235
    chr = g_malloc0(sizeof(CharDriverState));
2236
    s = g_malloc0(sizeof(NetCharDriver));
2237

    
2238
    s->fd = fd;
2239
    s->chan = io_channel_from_socket(s->fd);
2240
    s->bufcnt = 0;
2241
    s->bufptr = 0;
2242
    chr->opaque = s;
2243
    chr->chr_write = udp_chr_write;
2244
    chr->chr_update_read_handler = udp_chr_update_read_handler;
2245
    chr->chr_close = udp_chr_close;
2246
    /* be isn't opened until we get a connection */
2247
    chr->explicit_be_open = true;
2248
    return chr;
2249
}
2250

    
2251
static CharDriverState *qemu_chr_open_udp(QemuOpts *opts)
2252
{
2253
    Error *local_err = NULL;
2254
    int fd = -1;
2255

    
2256
    fd = inet_dgram_opts(opts, &local_err);
2257
    if (fd < 0) {
2258
        return NULL;
2259
    }
2260
    return qemu_chr_open_udp_fd(fd);
2261
}
2262

    
2263
/***********************************************************/
2264
/* TCP Net console */
2265

    
2266
typedef struct {
2267

    
2268
    GIOChannel *chan, *listen_chan;
2269
    guint tag, listen_tag;
2270
    int fd, listen_fd;
2271
    int connected;
2272
    int max_size;
2273
    int do_telnetopt;
2274
    int do_nodelay;
2275
    int is_unix;
2276
    int msgfd;
2277
} TCPCharDriver;
2278

    
2279
static gboolean tcp_chr_accept(GIOChannel *chan, GIOCondition cond, void *opaque);
2280

    
2281
static int tcp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
2282
{
2283
    TCPCharDriver *s = chr->opaque;
2284
    if (s->connected) {
2285
        return io_channel_send(s->chan, buf, len);
2286
    } else {
2287
        /* XXX: indicate an error ? */
2288
        return len;
2289
    }
2290
}
2291

    
2292
static int tcp_chr_read_poll(void *opaque)
2293
{
2294
    CharDriverState *chr = opaque;
2295
    TCPCharDriver *s = chr->opaque;
2296
    if (!s->connected)
2297
        return 0;
2298
    s->max_size = qemu_chr_be_can_write(chr);
2299
    return s->max_size;
2300
}
2301

    
2302
#define IAC 255
2303
#define IAC_BREAK 243
2304
static void tcp_chr_process_IAC_bytes(CharDriverState *chr,
2305
                                      TCPCharDriver *s,
2306
                                      uint8_t *buf, int *size)
2307
{
2308
    /* Handle any telnet client's basic IAC options to satisfy char by
2309
     * char mode with no echo.  All IAC options will be removed from
2310
     * the buf and the do_telnetopt variable will be used to track the
2311
     * state of the width of the IAC information.
2312
     *
2313
     * IAC commands come in sets of 3 bytes with the exception of the
2314
     * "IAC BREAK" command and the double IAC.
2315
     */
2316

    
2317
    int i;
2318
    int j = 0;
2319

    
2320
    for (i = 0; i < *size; i++) {
2321
        if (s->do_telnetopt > 1) {
2322
            if ((unsigned char)buf[i] == IAC && s->do_telnetopt == 2) {
2323
                /* Double IAC means send an IAC */
2324
                if (j != i)
2325
                    buf[j] = buf[i];
2326
                j++;
2327
                s->do_telnetopt = 1;
2328
            } else {
2329
                if ((unsigned char)buf[i] == IAC_BREAK && s->do_telnetopt == 2) {
2330
                    /* Handle IAC break commands by sending a serial break */
2331
                    qemu_chr_be_event(chr, CHR_EVENT_BREAK);
2332
                    s->do_telnetopt++;
2333
                }
2334
                s->do_telnetopt++;
2335
            }
2336
            if (s->do_telnetopt >= 4) {
2337
                s->do_telnetopt = 1;
2338
            }
2339
        } else {
2340
            if ((unsigned char)buf[i] == IAC) {
2341
                s->do_telnetopt = 2;
2342
            } else {
2343
                if (j != i)
2344
                    buf[j] = buf[i];
2345
                j++;
2346
            }
2347
        }
2348
    }
2349
    *size = j;
2350
}
2351

    
2352
static int tcp_get_msgfd(CharDriverState *chr)
2353
{
2354
    TCPCharDriver *s = chr->opaque;
2355
    int fd = s->msgfd;
2356
    s->msgfd = -1;
2357
    return fd;
2358
}
2359

    
2360
#ifndef _WIN32
2361
static void unix_process_msgfd(CharDriverState *chr, struct msghdr *msg)
2362
{
2363
    TCPCharDriver *s = chr->opaque;
2364
    struct cmsghdr *cmsg;
2365

    
2366
    for (cmsg = CMSG_FIRSTHDR(msg); cmsg; cmsg = CMSG_NXTHDR(msg, cmsg)) {
2367
        int fd;
2368

    
2369
        if (cmsg->cmsg_len != CMSG_LEN(sizeof(int)) ||
2370
            cmsg->cmsg_level != SOL_SOCKET ||
2371
            cmsg->cmsg_type != SCM_RIGHTS)
2372
            continue;
2373

    
2374
        fd = *((int *)CMSG_DATA(cmsg));
2375
        if (fd < 0)
2376
            continue;
2377

    
2378
        /* O_NONBLOCK is preserved across SCM_RIGHTS so reset it */
2379
        qemu_set_block(fd);
2380

    
2381
#ifndef MSG_CMSG_CLOEXEC
2382
        qemu_set_cloexec(fd);
2383
#endif
2384
        if (s->msgfd != -1)
2385
            close(s->msgfd);
2386
        s->msgfd = fd;
2387
    }
2388
}
2389

    
2390
static ssize_t tcp_chr_recv(CharDriverState *chr, char *buf, size_t len)
2391
{
2392
    TCPCharDriver *s = chr->opaque;
2393
    struct msghdr msg = { NULL, };
2394
    struct iovec iov[1];
2395
    union {
2396
        struct cmsghdr cmsg;
2397
        char control[CMSG_SPACE(sizeof(int))];
2398
    } msg_control;
2399
    int flags = 0;
2400
    ssize_t ret;
2401

    
2402
    iov[0].iov_base = buf;
2403
    iov[0].iov_len = len;
2404

    
2405
    msg.msg_iov = iov;
2406
    msg.msg_iovlen = 1;
2407
    msg.msg_control = &msg_control;
2408
    msg.msg_controllen = sizeof(msg_control);
2409

    
2410
#ifdef MSG_CMSG_CLOEXEC
2411
    flags |= MSG_CMSG_CLOEXEC;
2412
#endif
2413
    ret = recvmsg(s->fd, &msg, flags);
2414
    if (ret > 0 && s->is_unix) {
2415
        unix_process_msgfd(chr, &msg);
2416
    }
2417

    
2418
    return ret;
2419
}
2420
#else
2421
static ssize_t tcp_chr_recv(CharDriverState *chr, char *buf, size_t len)
2422
{
2423
    TCPCharDriver *s = chr->opaque;
2424
    return qemu_recv(s->fd, buf, len, 0);
2425
}
2426
#endif
2427

    
2428
static GSource *tcp_chr_add_watch(CharDriverState *chr, GIOCondition cond)
2429
{
2430
    TCPCharDriver *s = chr->opaque;
2431
    return g_io_create_watch(s->chan, cond);
2432
}
2433

    
2434
static gboolean tcp_chr_read(GIOChannel *chan, GIOCondition cond, void *opaque)
2435
{
2436
    CharDriverState *chr = opaque;
2437
    TCPCharDriver *s = chr->opaque;
2438
    uint8_t buf[READ_BUF_LEN];
2439
    int len, size;
2440

    
2441
    if (!s->connected || s->max_size <= 0) {
2442
        return TRUE;
2443
    }
2444
    len = sizeof(buf);
2445
    if (len > s->max_size)
2446
        len = s->max_size;
2447
    size = tcp_chr_recv(chr, (void *)buf, len);
2448
    if (size == 0) {
2449
        /* connection closed */
2450
        s->connected = 0;
2451
        if (s->listen_chan) {
2452
            s->listen_tag = g_io_add_watch(s->listen_chan, G_IO_IN, tcp_chr_accept, chr);
2453
        }
2454
        if (s->tag) {
2455
            io_remove_watch_poll(s->tag);
2456
            s->tag = 0;
2457
        }
2458
        g_io_channel_unref(s->chan);
2459
        s->chan = NULL;
2460
        closesocket(s->fd);
2461
        s->fd = -1;
2462
        qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
2463
    } else if (size > 0) {
2464
        if (s->do_telnetopt)
2465
            tcp_chr_process_IAC_bytes(chr, s, buf, &size);
2466
        if (size > 0)
2467
            qemu_chr_be_write(chr, buf, size);
2468
    }
2469

    
2470
    return TRUE;
2471
}
2472

    
2473
#ifndef _WIN32
2474
CharDriverState *qemu_chr_open_eventfd(int eventfd)
2475
{
2476
    return qemu_chr_open_fd(eventfd, eventfd);
2477
}
2478
#endif
2479

    
2480
static void tcp_chr_connect(void *opaque)
2481
{
2482
    CharDriverState *chr = opaque;
2483
    TCPCharDriver *s = chr->opaque;
2484

    
2485
    s->connected = 1;
2486
    if (s->chan) {
2487
        s->tag = io_add_watch_poll(s->chan, tcp_chr_read_poll, tcp_chr_read, chr);
2488
    }
2489
    qemu_chr_be_generic_open(chr);
2490
}
2491

    
2492
#define IACSET(x,a,b,c) x[0] = a; x[1] = b; x[2] = c;
2493
static void tcp_chr_telnet_init(int fd)
2494
{
2495
    char buf[3];
2496
    /* Send the telnet negotion to put telnet in binary, no echo, single char mode */
2497
    IACSET(buf, 0xff, 0xfb, 0x01);  /* IAC WILL ECHO */
2498
    send(fd, (char *)buf, 3, 0);
2499
    IACSET(buf, 0xff, 0xfb, 0x03);  /* IAC WILL Suppress go ahead */
2500
    send(fd, (char *)buf, 3, 0);
2501
    IACSET(buf, 0xff, 0xfb, 0x00);  /* IAC WILL Binary */
2502
    send(fd, (char *)buf, 3, 0);
2503
    IACSET(buf, 0xff, 0xfd, 0x00);  /* IAC DO Binary */
2504
    send(fd, (char *)buf, 3, 0);
2505
}
2506

    
2507
static int tcp_chr_add_client(CharDriverState *chr, int fd)
2508
{
2509
    TCPCharDriver *s = chr->opaque;
2510
    if (s->fd != -1)
2511
        return -1;
2512

    
2513
    qemu_set_nonblock(fd);
2514
    if (s->do_nodelay)
2515
        socket_set_nodelay(fd);
2516
    s->fd = fd;
2517
    s->chan = io_channel_from_socket(fd);
2518
    if (s->listen_tag) {
2519
        g_source_remove(s->listen_tag);
2520
        s->listen_tag = 0;
2521
    }
2522
    tcp_chr_connect(chr);
2523

    
2524
    return 0;
2525
}
2526

    
2527
static gboolean tcp_chr_accept(GIOChannel *channel, GIOCondition cond, void *opaque)
2528
{
2529
    CharDriverState *chr = opaque;
2530
    TCPCharDriver *s = chr->opaque;
2531
    struct sockaddr_in saddr;
2532
#ifndef _WIN32
2533
    struct sockaddr_un uaddr;
2534
#endif
2535
    struct sockaddr *addr;
2536
    socklen_t len;
2537
    int fd;
2538

    
2539
    for(;;) {
2540
#ifndef _WIN32
2541
        if (s->is_unix) {
2542
            len = sizeof(uaddr);
2543
            addr = (struct sockaddr *)&uaddr;
2544
        } else
2545
#endif
2546
        {
2547
            len = sizeof(saddr);
2548
            addr = (struct sockaddr *)&saddr;
2549
        }
2550
        fd = qemu_accept(s->listen_fd, addr, &len);
2551
        if (fd < 0 && errno != EINTR) {
2552
            s->listen_tag = 0;
2553
            return FALSE;
2554
        } else if (fd >= 0) {
2555
            if (s->do_telnetopt)
2556
                tcp_chr_telnet_init(fd);
2557
            break;
2558
        }
2559
    }
2560
    if (tcp_chr_add_client(chr, fd) < 0)
2561
        close(fd);
2562

    
2563
    return TRUE;
2564
}
2565

    
2566
static void tcp_chr_close(CharDriverState *chr)
2567
{
2568
    TCPCharDriver *s = chr->opaque;
2569
    if (s->fd >= 0) {
2570
        if (s->tag) {
2571
            io_remove_watch_poll(s->tag);
2572
            s->tag = 0;
2573
        }
2574
        if (s->chan) {
2575
            g_io_channel_unref(s->chan);
2576
        }
2577
        closesocket(s->fd);
2578
    }
2579
    if (s->listen_fd >= 0) {
2580
        if (s->listen_tag) {
2581
            g_source_remove(s->listen_tag);
2582
            s->listen_tag = 0;
2583
        }
2584
        if (s->listen_chan) {
2585
            g_io_channel_unref(s->listen_chan);
2586
        }
2587
        closesocket(s->listen_fd);
2588
    }
2589
    g_free(s);
2590
    qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
2591
}
2592

    
2593
static CharDriverState *qemu_chr_open_socket_fd(int fd, bool do_nodelay,
2594
                                                bool is_listen, bool is_telnet,
2595
                                                bool is_waitconnect,
2596
                                                Error **errp)
2597
{
2598
    CharDriverState *chr = NULL;
2599
    TCPCharDriver *s = NULL;
2600
    char host[NI_MAXHOST], serv[NI_MAXSERV];
2601
    const char *left = "", *right = "";
2602
    struct sockaddr_storage ss;
2603
    socklen_t ss_len = sizeof(ss);
2604

    
2605
    memset(&ss, 0, ss_len);
2606
    if (getsockname(fd, (struct sockaddr *) &ss, &ss_len) != 0) {
2607
        error_setg_errno(errp, errno, "getsockname");
2608
        return NULL;
2609
    }
2610

    
2611
    chr = g_malloc0(sizeof(CharDriverState));
2612
    s = g_malloc0(sizeof(TCPCharDriver));
2613

    
2614
    s->connected = 0;
2615
    s->fd = -1;
2616
    s->listen_fd = -1;
2617
    s->msgfd = -1;
2618

    
2619
    chr->filename = g_malloc(256);
2620
    switch (ss.ss_family) {
2621
#ifndef _WIN32
2622
    case AF_UNIX:
2623
        s->is_unix = 1;
2624
        snprintf(chr->filename, 256, "unix:%s%s",
2625
                 ((struct sockaddr_un *)(&ss))->sun_path,
2626
                 is_listen ? ",server" : "");
2627
        break;
2628
#endif
2629
    case AF_INET6:
2630
        left  = "[";
2631
        right = "]";
2632
        /* fall through */
2633
    case AF_INET:
2634
        s->do_nodelay = do_nodelay;
2635
        getnameinfo((struct sockaddr *) &ss, ss_len, host, sizeof(host),
2636
                    serv, sizeof(serv), NI_NUMERICHOST | NI_NUMERICSERV);
2637
        snprintf(chr->filename, 256, "%s:%s%s%s:%s%s",
2638
                 is_telnet ? "telnet" : "tcp",
2639
                 left, host, right, serv,
2640
                 is_listen ? ",server" : "");
2641
        break;
2642
    }
2643

    
2644
    chr->opaque = s;
2645
    chr->chr_write = tcp_chr_write;
2646
    chr->chr_close = tcp_chr_close;
2647
    chr->get_msgfd = tcp_get_msgfd;
2648
    chr->chr_add_client = tcp_chr_add_client;
2649
    chr->chr_add_watch = tcp_chr_add_watch;
2650
    /* be isn't opened until we get a connection */
2651
    chr->explicit_be_open = true;
2652

    
2653
    if (is_listen) {
2654
        s->listen_fd = fd;
2655
        s->listen_chan = io_channel_from_socket(s->listen_fd);
2656
        s->listen_tag = g_io_add_watch(s->listen_chan, G_IO_IN, tcp_chr_accept, chr);
2657
        if (is_telnet) {
2658
            s->do_telnetopt = 1;
2659
        }
2660
    } else {
2661
        s->connected = 1;
2662
        s->fd = fd;
2663
        socket_set_nodelay(fd);
2664
        s->chan = io_channel_from_socket(s->fd);
2665
        tcp_chr_connect(chr);
2666
    }
2667

    
2668
    if (is_listen && is_waitconnect) {
2669
        fprintf(stderr, "QEMU waiting for connection on: %s\n",
2670
                chr->filename);
2671
        tcp_chr_accept(s->listen_chan, G_IO_IN, chr);
2672
        qemu_set_nonblock(s->listen_fd);
2673
    }
2674
    return chr;
2675
}
2676

    
2677
static CharDriverState *qemu_chr_open_socket(QemuOpts *opts)
2678
{
2679
    CharDriverState *chr = NULL;
2680
    Error *local_err = NULL;
2681
    int fd = -1;
2682

    
2683
    bool is_listen      = qemu_opt_get_bool(opts, "server", false);
2684
    bool is_waitconnect = is_listen && qemu_opt_get_bool(opts, "wait", true);
2685
    bool is_telnet      = qemu_opt_get_bool(opts, "telnet", false);
2686
    bool do_nodelay     = !qemu_opt_get_bool(opts, "delay", true);
2687
    bool is_unix        = qemu_opt_get(opts, "path") != NULL;
2688

    
2689
    if (is_unix) {
2690
        if (is_listen) {
2691
            fd = unix_listen_opts(opts, &local_err);
2692
        } else {
2693
            fd = unix_connect_opts(opts, &local_err, NULL, NULL);
2694
        }
2695
    } else {
2696
        if (is_listen) {
2697
            fd = inet_listen_opts(opts, 0, &local_err);
2698
        } else {
2699
            fd = inet_connect_opts(opts, &local_err, NULL, NULL);
2700
        }
2701
    }
2702
    if (fd < 0) {
2703
        goto fail;
2704
    }
2705

    
2706
    if (!is_waitconnect)
2707
        qemu_set_nonblock(fd);
2708

    
2709
    chr = qemu_chr_open_socket_fd(fd, do_nodelay, is_listen, is_telnet,
2710
                                  is_waitconnect, &local_err);
2711
    if (error_is_set(&local_err)) {
2712
        goto fail;
2713
    }
2714
    return chr;
2715

    
2716

    
2717
 fail:
2718
    if (local_err) {
2719
        qerror_report_err(local_err);
2720
        error_free(local_err);
2721
    }
2722
    if (fd >= 0) {
2723
        closesocket(fd);
2724
    }
2725
    if (chr) {
2726
        g_free(chr->opaque);
2727
        g_free(chr);
2728
    }
2729
    return NULL;
2730
}
2731

    
2732
/*********************************************************/
2733
/* Ring buffer chardev */
2734

    
2735
typedef struct {
2736
    size_t size;
2737
    size_t prod;
2738
    size_t cons;
2739
    uint8_t *cbuf;
2740
} RingBufCharDriver;
2741

    
2742
static size_t ringbuf_count(const CharDriverState *chr)
2743
{
2744
    const RingBufCharDriver *d = chr->opaque;
2745

    
2746
    return d->prod - d->cons;
2747
}
2748

    
2749
static int ringbuf_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
2750
{
2751
    RingBufCharDriver *d = chr->opaque;
2752
    int i;
2753

    
2754
    if (!buf || (len < 0)) {
2755
        return -1;
2756
    }
2757

    
2758
    for (i = 0; i < len; i++ ) {
2759
        d->cbuf[d->prod++ & (d->size - 1)] = buf[i];
2760
        if (d->prod - d->cons > d->size) {
2761
            d->cons = d->prod - d->size;
2762
        }
2763
    }
2764

    
2765
    return 0;
2766
}
2767

    
2768
static int ringbuf_chr_read(CharDriverState *chr, uint8_t *buf, int len)
2769
{
2770
    RingBufCharDriver *d = chr->opaque;
2771
    int i;
2772

    
2773
    for (i = 0; i < len && d->cons != d->prod; i++) {
2774
        buf[i] = d->cbuf[d->cons++ & (d->size - 1)];
2775
    }
2776

    
2777
    return i;
2778
}
2779

    
2780
static void ringbuf_chr_close(struct CharDriverState *chr)
2781
{
2782
    RingBufCharDriver *d = chr->opaque;
2783

    
2784
    g_free(d->cbuf);
2785
    g_free(d);
2786
    chr->opaque = NULL;
2787
}
2788

    
2789
static CharDriverState *qemu_chr_open_memory(ChardevMemory *opts,
2790
                                             Error **errp)
2791
{
2792
    CharDriverState *chr;
2793
    RingBufCharDriver *d;
2794

    
2795
    chr = g_malloc0(sizeof(CharDriverState));
2796
    d = g_malloc(sizeof(*d));
2797

    
2798
    d->size = opts->has_size ? opts->size : 65536;
2799

    
2800
    /* The size must be power of 2 */
2801
    if (d->size & (d->size - 1)) {
2802
        error_setg(errp, "size of memory chardev must be power of two");
2803
        goto fail;
2804
    }
2805

    
2806
    d->prod = 0;
2807
    d->cons = 0;
2808
    d->cbuf = g_malloc0(d->size);
2809

    
2810
    chr->opaque = d;
2811
    chr->chr_write = ringbuf_chr_write;
2812
    chr->chr_close = ringbuf_chr_close;
2813

    
2814
    return chr;
2815

    
2816
fail:
2817
    g_free(d);
2818
    g_free(chr);
2819
    return NULL;
2820
}
2821

    
2822
static bool chr_is_ringbuf(const CharDriverState *chr)
2823
{
2824
    return chr->chr_write == ringbuf_chr_write;
2825
}
2826

    
2827
void qmp_ringbuf_write(const char *device, const char *data,
2828
                       bool has_format, enum DataFormat format,
2829
                       Error **errp)
2830
{
2831
    CharDriverState *chr;
2832
    const uint8_t *write_data;
2833
    int ret;
2834
    gsize write_count;
2835

    
2836
    chr = qemu_chr_find(device);
2837
    if (!chr) {
2838
        error_setg(errp, "Device '%s' not found", device);
2839
        return;
2840
    }
2841

    
2842
    if (!chr_is_ringbuf(chr)) {
2843
        error_setg(errp,"%s is not a ringbuf device", device);
2844
        return;
2845
    }
2846

    
2847
    if (has_format && (format == DATA_FORMAT_BASE64)) {
2848
        write_data = g_base64_decode(data, &write_count);
2849
    } else {
2850
        write_data = (uint8_t *)data;
2851
        write_count = strlen(data);
2852
    }
2853

    
2854
    ret = ringbuf_chr_write(chr, write_data, write_count);
2855

    
2856
    if (write_data != (uint8_t *)data) {
2857
        g_free((void *)write_data);
2858
    }
2859

    
2860
    if (ret < 0) {
2861
        error_setg(errp, "Failed to write to device %s", device);
2862
        return;
2863
    }
2864
}
2865

    
2866
char *qmp_ringbuf_read(const char *device, int64_t size,
2867
                       bool has_format, enum DataFormat format,
2868
                       Error **errp)
2869
{
2870
    CharDriverState *chr;
2871
    uint8_t *read_data;
2872
    size_t count;
2873
    char *data;
2874

    
2875
    chr = qemu_chr_find(device);
2876
    if (!chr) {
2877
        error_setg(errp, "Device '%s' not found", device);
2878
        return NULL;
2879
    }
2880

    
2881
    if (!chr_is_ringbuf(chr)) {
2882
        error_setg(errp,"%s is not a ringbuf device", device);
2883
        return NULL;
2884
    }
2885

    
2886
    if (size <= 0) {
2887
        error_setg(errp, "size must be greater than zero");
2888
        return NULL;
2889
    }
2890

    
2891
    count = ringbuf_count(chr);
2892
    size = size > count ? count : size;
2893
    read_data = g_malloc(size + 1);
2894

    
2895
    ringbuf_chr_read(chr, read_data, size);
2896

    
2897
    if (has_format && (format == DATA_FORMAT_BASE64)) {
2898
        data = g_base64_encode(read_data, size);
2899
        g_free(read_data);
2900
    } else {
2901
        /*
2902
         * FIXME should read only complete, valid UTF-8 characters up
2903
         * to @size bytes.  Invalid sequences should be replaced by a
2904
         * suitable replacement character.  Except when (and only
2905
         * when) ring buffer lost characters since last read, initial
2906
         * continuation characters should be dropped.
2907
         */
2908
        read_data[size] = 0;
2909
        data = (char *)read_data;
2910
    }
2911

    
2912
    return data;
2913
}
2914

    
2915
QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename)
2916
{
2917
    char host[65], port[33], width[8], height[8];
2918
    int pos;
2919
    const char *p;
2920
    QemuOpts *opts;
2921
    Error *local_err = NULL;
2922

    
2923
    opts = qemu_opts_create(qemu_find_opts("chardev"), label, 1, &local_err);
2924
    if (error_is_set(&local_err)) {
2925
        qerror_report_err(local_err);
2926
        error_free(local_err);
2927
        return NULL;
2928
    }
2929

    
2930
    if (strstart(filename, "mon:", &p)) {
2931
        filename = p;
2932
        qemu_opt_set(opts, "mux", "on");
2933
    }
2934

    
2935
    if (strcmp(filename, "null")    == 0 ||
2936
        strcmp(filename, "pty")     == 0 ||
2937
        strcmp(filename, "msmouse") == 0 ||
2938
        strcmp(filename, "braille") == 0 ||
2939
        strcmp(filename, "stdio")   == 0) {
2940
        qemu_opt_set(opts, "backend", filename);
2941
        return opts;
2942
    }
2943
    if (strstart(filename, "vc", &p)) {
2944
        qemu_opt_set(opts, "backend", "vc");
2945
        if (*p == ':') {
2946
            if (sscanf(p+1, "%8[0-9]x%8[0-9]", width, height) == 2) {
2947
                /* pixels */
2948
                qemu_opt_set(opts, "width", width);
2949
                qemu_opt_set(opts, "height", height);
2950
            } else if (sscanf(p+1, "%8[0-9]Cx%8[0-9]C", width, height) == 2) {
2951
                /* chars */
2952
                qemu_opt_set(opts, "cols", width);
2953
                qemu_opt_set(opts, "rows", height);
2954
            } else {
2955
                goto fail;
2956
            }
2957
        }
2958
        return opts;
2959
    }
2960
    if (strcmp(filename, "con:") == 0) {
2961
        qemu_opt_set(opts, "backend", "console");
2962
        return opts;
2963
    }
2964
    if (strstart(filename, "COM", NULL)) {
2965
        qemu_opt_set(opts, "backend", "serial");
2966
        qemu_opt_set(opts, "path", filename);
2967
        return opts;
2968
    }
2969
    if (strstart(filename, "file:", &p)) {
2970
        qemu_opt_set(opts, "backend", "file");
2971
        qemu_opt_set(opts, "path", p);
2972
        return opts;
2973
    }
2974
    if (strstart(filename, "pipe:", &p)) {
2975
        qemu_opt_set(opts, "backend", "pipe");
2976
        qemu_opt_set(opts, "path", p);
2977
        return opts;
2978
    }
2979
    if (strstart(filename, "tcp:", &p) ||
2980
        strstart(filename, "telnet:", &p)) {
2981
        if (sscanf(p, "%64[^:]:%32[^,]%n", host, port, &pos) < 2) {
2982
            host[0] = 0;
2983
            if (sscanf(p, ":%32[^,]%n", port, &pos) < 1)
2984
                goto fail;
2985
        }
2986
        qemu_opt_set(opts, "backend", "socket");
2987
        qemu_opt_set(opts, "host", host);
2988
        qemu_opt_set(opts, "port", port);
2989
        if (p[pos] == ',') {
2990
            if (qemu_opts_do_parse(opts, p+pos+1, NULL) != 0)
2991
                goto fail;
2992
        }
2993
        if (strstart(filename, "telnet:", &p))
2994
            qemu_opt_set(opts, "telnet", "on");
2995
        return opts;
2996
    }
2997
    if (strstart(filename, "udp:", &p)) {
2998
        qemu_opt_set(opts, "backend", "udp");
2999
        if (sscanf(p, "%64[^:]:%32[^@,]%n", host, port, &pos) < 2) {
3000
            host[0] = 0;
3001
            if (sscanf(p, ":%32[^@,]%n", port, &pos) < 1) {
3002
                goto fail;
3003
            }
3004
        }
3005
        qemu_opt_set(opts, "host", host);
3006
        qemu_opt_set(opts, "port", port);
3007
        if (p[pos] == '@') {
3008
            p += pos + 1;
3009
            if (sscanf(p, "%64[^:]:%32[^,]%n", host, port, &pos) < 2) {
3010
                host[0] = 0;
3011
                if (sscanf(p, ":%32[^,]%n", port, &pos) < 1) {
3012
                    goto fail;
3013
                }
3014
            }
3015
            qemu_opt_set(opts, "localaddr", host);
3016
            qemu_opt_set(opts, "localport", port);
3017
        }
3018
        return opts;
3019
    }
3020
    if (strstart(filename, "unix:", &p)) {
3021
        qemu_opt_set(opts, "backend", "socket");
3022
        if (qemu_opts_do_parse(opts, p, "path") != 0)
3023
            goto fail;
3024
        return opts;
3025
    }
3026
    if (strstart(filename, "/dev/parport", NULL) ||
3027
        strstart(filename, "/dev/ppi", NULL)) {
3028
        qemu_opt_set(opts, "backend", "parport");
3029
        qemu_opt_set(opts, "path", filename);
3030
        return opts;
3031
    }
3032
    if (strstart(filename, "/dev/", NULL)) {
3033
        qemu_opt_set(opts, "backend", "tty");
3034
        qemu_opt_set(opts, "path", filename);
3035
        return opts;
3036
    }
3037

    
3038
fail:
3039
    qemu_opts_del(opts);
3040
    return NULL;
3041
}
3042

    
3043
static void qemu_chr_parse_file_out(QemuOpts *opts, ChardevBackend *backend,
3044
                                    Error **errp)
3045
{
3046
    const char *path = qemu_opt_get(opts, "path");
3047

    
3048
    if (path == NULL) {
3049
        error_setg(errp, "chardev: file: no filename given");
3050
        return;
3051
    }
3052
    backend->file = g_new0(ChardevFile, 1);
3053
    backend->file->out = g_strdup(path);
3054
}
3055

    
3056
static void qemu_chr_parse_stdio(QemuOpts *opts, ChardevBackend *backend,
3057
                                 Error **errp)
3058
{
3059
    backend->stdio = g_new0(ChardevStdio, 1);
3060
    backend->stdio->has_signal = true;
3061
    backend->stdio->signal =
3062
        qemu_opt_get_bool(opts, "signal", display_type != DT_NOGRAPHIC);
3063
}
3064

    
3065
static void qemu_chr_parse_serial(QemuOpts *opts, ChardevBackend *backend,
3066
                                  Error **errp)
3067
{
3068
    const char *device = qemu_opt_get(opts, "path");
3069

    
3070
    if (device == NULL) {
3071
        error_setg(errp, "chardev: serial/tty: no device path given");
3072
        return;
3073
    }
3074
    backend->serial = g_new0(ChardevHostdev, 1);
3075
    backend->serial->device = g_strdup(device);
3076
}
3077

    
3078
static void qemu_chr_parse_parallel(QemuOpts *opts, ChardevBackend *backend,
3079
                                    Error **errp)
3080
{
3081
    const char *device = qemu_opt_get(opts, "path");
3082

    
3083
    if (device == NULL) {
3084
        error_setg(errp, "chardev: parallel: no device path given");
3085
        return;
3086
    }
3087
    backend->parallel = g_new0(ChardevHostdev, 1);
3088
    backend->parallel->device = g_strdup(device);
3089
}
3090

    
3091
static void qemu_chr_parse_pipe(QemuOpts *opts, ChardevBackend *backend,
3092
                                Error **errp)
3093
{
3094
    const char *device = qemu_opt_get(opts, "path");
3095

    
3096
    if (device == NULL) {
3097
        error_setg(errp, "chardev: pipe: no device path given");
3098
        return;
3099
    }
3100
    backend->pipe = g_new0(ChardevHostdev, 1);
3101
    backend->pipe->device = g_strdup(device);
3102
}
3103

    
3104
static void qemu_chr_parse_memory(QemuOpts *opts, ChardevBackend *backend,
3105
                                  Error **errp)
3106
{
3107
    int val;
3108

    
3109
    backend->memory = g_new0(ChardevMemory, 1);
3110

    
3111
    val = qemu_opt_get_number(opts, "size", 0);
3112
    if (val != 0) {
3113
        backend->memory->has_size = true;
3114
        backend->memory->size = val;
3115
    }
3116
}
3117

    
3118
typedef struct CharDriver {
3119
    const char *name;
3120
    /* old, pre qapi */
3121
    CharDriverState *(*open)(QemuOpts *opts);
3122
    /* new, qapi-based */
3123
    int kind;
3124
    void (*parse)(QemuOpts *opts, ChardevBackend *backend, Error **errp);
3125
} CharDriver;
3126

    
3127
static GSList *backends;
3128

    
3129
void register_char_driver(const char *name, CharDriverState *(*open)(QemuOpts *))
3130
{
3131
    CharDriver *s;
3132

    
3133
    s = g_malloc0(sizeof(*s));
3134
    s->name = g_strdup(name);
3135
    s->open = open;
3136

    
3137
    backends = g_slist_append(backends, s);
3138
}
3139

    
3140
void register_char_driver_qapi(const char *name, int kind,
3141
        void (*parse)(QemuOpts *opts, ChardevBackend *backend, Error **errp))
3142
{
3143
    CharDriver *s;
3144

    
3145
    s = g_malloc0(sizeof(*s));
3146
    s->name = g_strdup(name);
3147
    s->kind = kind;
3148
    s->parse = parse;
3149

    
3150
    backends = g_slist_append(backends, s);
3151
}
3152

    
3153
CharDriverState *qemu_chr_new_from_opts(QemuOpts *opts,
3154
                                    void (*init)(struct CharDriverState *s),
3155
                                    Error **errp)
3156
{
3157
    CharDriver *cd;
3158
    CharDriverState *chr;
3159
    GSList *i;
3160

    
3161
    if (qemu_opts_id(opts) == NULL) {
3162
        error_setg(errp, "chardev: no id specified");
3163
        goto err;
3164
    }
3165

    
3166
    if (qemu_opt_get(opts, "backend") == NULL) {
3167
        error_setg(errp, "chardev: \"%s\" missing backend",
3168
                   qemu_opts_id(opts));
3169
        goto err;
3170
    }
3171
    for (i = backends; i; i = i->next) {
3172
        cd = i->data;
3173

    
3174
        if (strcmp(cd->name, qemu_opt_get(opts, "backend")) == 0) {
3175
            break;
3176
        }
3177
    }
3178
    if (i == NULL) {
3179
        error_setg(errp, "chardev: backend \"%s\" not found",
3180
                   qemu_opt_get(opts, "backend"));
3181
        goto err;
3182
    }
3183

    
3184
    if (!cd->open) {
3185
        /* using new, qapi init */
3186
        ChardevBackend *backend = g_new0(ChardevBackend, 1);
3187
        ChardevReturn *ret = NULL;
3188
        const char *id = qemu_opts_id(opts);
3189
        const char *bid = NULL;
3190

    
3191
        if (qemu_opt_get_bool(opts, "mux", 0)) {
3192
            bid = g_strdup_printf("%s-base", id);
3193
        }
3194

    
3195
        chr = NULL;
3196
        backend->kind = cd->kind;
3197
        if (cd->parse) {
3198
            cd->parse(opts, backend, errp);
3199
            if (error_is_set(errp)) {
3200
                goto qapi_out;
3201
            }
3202
        }
3203
        ret = qmp_chardev_add(bid ? bid : id, backend, errp);
3204
        if (error_is_set(errp)) {
3205
            goto qapi_out;
3206
        }
3207

    
3208
        if (bid) {
3209
            qapi_free_ChardevBackend(backend);
3210
            qapi_free_ChardevReturn(ret);
3211
            backend = g_new0(ChardevBackend, 1);
3212
            backend->mux = g_new0(ChardevMux, 1);
3213
            backend->kind = CHARDEV_BACKEND_KIND_MUX;
3214
            backend->mux->chardev = g_strdup(bid);
3215
            ret = qmp_chardev_add(id, backend, errp);
3216
            if (error_is_set(errp)) {
3217
                goto qapi_out;
3218
            }
3219
        }
3220

    
3221
        chr = qemu_chr_find(id);
3222

    
3223
    qapi_out:
3224
        qapi_free_ChardevBackend(backend);
3225
        qapi_free_ChardevReturn(ret);
3226
        return chr;
3227
    }
3228

    
3229
    chr = cd->open(opts);
3230
    if (!chr) {
3231
        error_setg(errp, "chardev: opening backend \"%s\" failed",
3232
                   qemu_opt_get(opts, "backend"));
3233
        goto err;
3234
    }
3235

    
3236
    if (!chr->filename)
3237
        chr->filename = g_strdup(qemu_opt_get(opts, "backend"));
3238
    chr->init = init;
3239
    /* if we didn't create the chardev via qmp_chardev_add, we
3240
     * need to send the OPENED event here
3241
     */
3242
    if (!chr->explicit_be_open) {
3243
        qemu_chr_be_event(chr, CHR_EVENT_OPENED);
3244
    }
3245
    QTAILQ_INSERT_TAIL(&chardevs, chr, next);
3246

    
3247
    if (qemu_opt_get_bool(opts, "mux", 0)) {
3248
        CharDriverState *base = chr;
3249
        int len = strlen(qemu_opts_id(opts)) + 6;
3250
        base->label = g_malloc(len);
3251
        snprintf(base->label, len, "%s-base", qemu_opts_id(opts));
3252
        chr = qemu_chr_open_mux(base);
3253
        chr->filename = base->filename;
3254
        chr->avail_connections = MAX_MUX;
3255
        QTAILQ_INSERT_TAIL(&chardevs, chr, next);
3256
    } else {
3257
        chr->avail_connections = 1;
3258
    }
3259
    chr->label = g_strdup(qemu_opts_id(opts));
3260
    chr->opts = opts;
3261
    return chr;
3262

    
3263
err:
3264
    qemu_opts_del(opts);
3265
    return NULL;
3266
}
3267

    
3268
CharDriverState *qemu_chr_new(const char *label, const char *filename, void (*init)(struct CharDriverState *s))
3269
{
3270
    const char *p;
3271
    CharDriverState *chr;
3272
    QemuOpts *opts;
3273
    Error *err = NULL;
3274

    
3275
    if (strstart(filename, "chardev:", &p)) {
3276
        return qemu_chr_find(p);
3277
    }
3278

    
3279
    opts = qemu_chr_parse_compat(label, filename);
3280
    if (!opts)
3281
        return NULL;
3282

    
3283
    chr = qemu_chr_new_from_opts(opts, init, &err);
3284
    if (error_is_set(&err)) {
3285
        fprintf(stderr, "%s\n", error_get_pretty(err));
3286
        error_free(err);
3287
    }
3288
    if (chr && qemu_opt_get_bool(opts, "mux", 0)) {
3289
        qemu_chr_fe_claim_no_fail(chr);
3290
        monitor_init(chr, MONITOR_USE_READLINE);
3291
    }
3292
    return chr;
3293
}
3294

    
3295
void qemu_chr_fe_set_echo(struct CharDriverState *chr, bool echo)
3296
{
3297
    if (chr->chr_set_echo) {
3298
        chr->chr_set_echo(chr, echo);
3299
    }
3300
}
3301

    
3302
void qemu_chr_fe_set_open(struct CharDriverState *chr, int fe_open)
3303
{
3304
    if (chr->fe_open == fe_open) {
3305
        return;
3306
    }
3307
    chr->fe_open = fe_open;
3308
    if (chr->chr_set_fe_open) {
3309
        chr->chr_set_fe_open(chr, fe_open);
3310
    }
3311
}
3312

    
3313
int qemu_chr_fe_add_watch(CharDriverState *s, GIOCondition cond,
3314
                          GIOFunc func, void *user_data)
3315
{
3316
    GSource *src;
3317
    guint tag;
3318

    
3319
    if (s->chr_add_watch == NULL) {
3320
        return -ENOSYS;
3321
    }
3322

    
3323
    src = s->chr_add_watch(s, cond);
3324
    g_source_set_callback(src, (GSourceFunc)func, user_data, NULL);
3325
    tag = g_source_attach(src, NULL);
3326
    g_source_unref(src);
3327

    
3328
    return tag;
3329
}
3330

    
3331
int qemu_chr_fe_claim(CharDriverState *s)
3332
{
3333
    if (s->avail_connections < 1) {
3334
        return -1;
3335
    }
3336
    s->avail_connections--;
3337
    return 0;
3338
}
3339

    
3340
void qemu_chr_fe_claim_no_fail(CharDriverState *s)
3341
{
3342
    if (qemu_chr_fe_claim(s) != 0) {
3343
        fprintf(stderr, "%s: error chardev \"%s\" already used\n",
3344
                __func__, s->label);
3345
        exit(1);
3346
    }
3347
}
3348

    
3349
void qemu_chr_fe_release(CharDriverState *s)
3350
{
3351
    s->avail_connections++;
3352
}
3353

    
3354
void qemu_chr_delete(CharDriverState *chr)
3355
{
3356
    QTAILQ_REMOVE(&chardevs, chr, next);
3357
    if (chr->chr_close) {
3358
        chr->chr_close(chr);
3359
    }
3360
    g_free(chr->filename);
3361
    g_free(chr->label);
3362
    if (chr->opts) {
3363
        qemu_opts_del(chr->opts);
3364
    }
3365
    g_free(chr);
3366
}
3367

    
3368
ChardevInfoList *qmp_query_chardev(Error **errp)
3369
{
3370
    ChardevInfoList *chr_list = NULL;
3371
    CharDriverState *chr;
3372

    
3373
    QTAILQ_FOREACH(chr, &chardevs, next) {
3374
        ChardevInfoList *info = g_malloc0(sizeof(*info));
3375
        info->value = g_malloc0(sizeof(*info->value));
3376
        info->value->label = g_strdup(chr->label);
3377
        info->value->filename = g_strdup(chr->filename);
3378

    
3379
        info->next = chr_list;
3380
        chr_list = info;
3381
    }
3382

    
3383
    return chr_list;
3384
}
3385

    
3386
CharDriverState *qemu_chr_find(const char *name)
3387
{
3388
    CharDriverState *chr;
3389

    
3390
    QTAILQ_FOREACH(chr, &chardevs, next) {
3391
        if (strcmp(chr->label, name) != 0)
3392
            continue;
3393
        return chr;
3394
    }
3395
    return NULL;
3396
}
3397

    
3398
/* Get a character (serial) device interface.  */
3399
CharDriverState *qemu_char_get_next_serial(void)
3400
{
3401
    static int next_serial;
3402
    CharDriverState *chr;
3403

    
3404
    /* FIXME: This function needs to go away: use chardev properties!  */
3405

    
3406
    while (next_serial < MAX_SERIAL_PORTS && serial_hds[next_serial]) {
3407
        chr = serial_hds[next_serial++];
3408
        qemu_chr_fe_claim_no_fail(chr);
3409
        return chr;
3410
    }
3411
    return NULL;
3412
}
3413

    
3414
QemuOptsList qemu_chardev_opts = {
3415
    .name = "chardev",
3416
    .implied_opt_name = "backend",
3417
    .head = QTAILQ_HEAD_INITIALIZER(qemu_chardev_opts.head),
3418
    .desc = {
3419
        {
3420
            .name = "backend",
3421
            .type = QEMU_OPT_STRING,
3422
        },{
3423
            .name = "path",
3424
            .type = QEMU_OPT_STRING,
3425
        },{
3426
            .name = "host",
3427
            .type = QEMU_OPT_STRING,
3428
        },{
3429
            .name = "port",
3430
            .type = QEMU_OPT_STRING,
3431
        },{
3432
            .name = "localaddr",
3433
            .type = QEMU_OPT_STRING,
3434
        },{
3435
            .name = "localport",
3436
            .type = QEMU_OPT_STRING,
3437
        },{
3438
            .name = "to",
3439
            .type = QEMU_OPT_NUMBER,
3440
        },{
3441
            .name = "ipv4",
3442
            .type = QEMU_OPT_BOOL,
3443
        },{
3444
            .name = "ipv6",
3445
            .type = QEMU_OPT_BOOL,
3446
        },{
3447
            .name = "wait",
3448
            .type = QEMU_OPT_BOOL,
3449
        },{
3450
            .name = "server",
3451
            .type = QEMU_OPT_BOOL,
3452
        },{
3453
            .name = "delay",
3454
            .type = QEMU_OPT_BOOL,
3455
        },{
3456
            .name = "telnet",
3457
            .type = QEMU_OPT_BOOL,
3458
        },{
3459
            .name = "width",
3460
            .type = QEMU_OPT_NUMBER,
3461
        },{
3462
            .name = "height",
3463
            .type = QEMU_OPT_NUMBER,
3464
        },{
3465
            .name = "cols",
3466
            .type = QEMU_OPT_NUMBER,
3467
        },{
3468
            .name = "rows",
3469
            .type = QEMU_OPT_NUMBER,
3470
        },{
3471
            .name = "mux",
3472
            .type = QEMU_OPT_BOOL,
3473
        },{
3474
            .name = "signal",
3475
            .type = QEMU_OPT_BOOL,
3476
        },{
3477
            .name = "name",
3478
            .type = QEMU_OPT_STRING,
3479
        },{
3480
            .name = "debug",
3481
            .type = QEMU_OPT_NUMBER,
3482
        },{
3483
            .name = "size",
3484
            .type = QEMU_OPT_SIZE,
3485
        },
3486
        { /* end of list */ }
3487
    },
3488
};
3489

    
3490
#ifdef _WIN32
3491

    
3492
static CharDriverState *qmp_chardev_open_file(ChardevFile *file, Error **errp)
3493
{
3494
    HANDLE out;
3495

    
3496
    if (file->has_in) {
3497
        error_setg(errp, "input file not supported");
3498
        return NULL;
3499
    }
3500

    
3501
    out = CreateFile(file->out, GENERIC_WRITE, FILE_SHARE_READ, NULL,
3502
                     OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
3503
    if (out == INVALID_HANDLE_VALUE) {
3504
        error_setg(errp, "open %s failed", file->out);
3505
        return NULL;
3506
    }
3507
    return qemu_chr_open_win_file(out);
3508
}
3509

    
3510
static CharDriverState *qmp_chardev_open_serial(ChardevHostdev *serial,
3511
                                                Error **errp)
3512
{
3513
    return qemu_chr_open_win_path(serial->device);
3514
}
3515

    
3516
static CharDriverState *qmp_chardev_open_parallel(ChardevHostdev *parallel,
3517
                                                  Error **errp)
3518
{
3519
    error_setg(errp, "character device backend type 'parallel' not supported");
3520
    return NULL;
3521
}
3522

    
3523
#else /* WIN32 */
3524

    
3525
static int qmp_chardev_open_file_source(char *src, int flags,
3526
                                        Error **errp)
3527
{
3528
    int fd = -1;
3529

    
3530
    TFR(fd = qemu_open(src, flags, 0666));
3531
    if (fd == -1) {
3532
        error_setg_file_open(errp, errno, src);
3533
    }
3534
    return fd;
3535
}
3536

    
3537
static CharDriverState *qmp_chardev_open_file(ChardevFile *file, Error **errp)
3538
{
3539
    int flags, in = -1, out = -1;
3540

    
3541
    flags = O_WRONLY | O_TRUNC | O_CREAT | O_BINARY;
3542
    out = qmp_chardev_open_file_source(file->out, flags, errp);
3543
    if (error_is_set(errp)) {
3544
        return NULL;
3545
    }
3546

    
3547
    if (file->has_in) {
3548
        flags = O_RDONLY;
3549
        in = qmp_chardev_open_file_source(file->in, flags, errp);
3550
        if (error_is_set(errp)) {
3551
            qemu_close(out);
3552
            return NULL;
3553
        }
3554
    }
3555

    
3556
    return qemu_chr_open_fd(in, out);
3557
}
3558

    
3559
static CharDriverState *qmp_chardev_open_serial(ChardevHostdev *serial,
3560
                                                Error **errp)
3561
{
3562
#ifdef HAVE_CHARDEV_TTY
3563
    int fd;
3564

    
3565
    fd = qmp_chardev_open_file_source(serial->device, O_RDWR, errp);
3566
    if (error_is_set(errp)) {
3567
        return NULL;
3568
    }
3569
    qemu_set_nonblock(fd);
3570
    return qemu_chr_open_tty_fd(fd);
3571
#else
3572
    error_setg(errp, "character device backend type 'serial' not supported");
3573
    return NULL;
3574
#endif
3575
}
3576

    
3577
static CharDriverState *qmp_chardev_open_parallel(ChardevHostdev *parallel,
3578
                                                  Error **errp)
3579
{
3580
#ifdef HAVE_CHARDEV_PARPORT
3581
    int fd;
3582

    
3583
    fd = qmp_chardev_open_file_source(parallel->device, O_RDWR, errp);
3584
    if (error_is_set(errp)) {
3585
        return NULL;
3586
    }
3587
    return qemu_chr_open_pp_fd(fd);
3588
#else
3589
    error_setg(errp, "character device backend type 'parallel' not supported");
3590
    return NULL;
3591
#endif
3592
}
3593

    
3594
#endif /* WIN32 */
3595

    
3596
static CharDriverState *qmp_chardev_open_socket(ChardevSocket *sock,
3597
                                                Error **errp)
3598
{
3599
    SocketAddress *addr = sock->addr;
3600
    bool do_nodelay     = sock->has_nodelay ? sock->nodelay : false;
3601
    bool is_listen      = sock->has_server  ? sock->server  : true;
3602
    bool is_telnet      = sock->has_telnet  ? sock->telnet  : false;
3603
    bool is_waitconnect = sock->has_wait    ? sock->wait    : false;
3604
    int fd;
3605

    
3606
    if (is_listen) {
3607
        fd = socket_listen(addr, errp);
3608
    } else {
3609
        fd = socket_connect(addr, errp, NULL, NULL);
3610
    }
3611
    if (error_is_set(errp)) {
3612
        return NULL;
3613
    }
3614
    return qemu_chr_open_socket_fd(fd, do_nodelay, is_listen,
3615
                                   is_telnet, is_waitconnect, errp);
3616
}
3617

    
3618
static CharDriverState *qmp_chardev_open_udp(ChardevUdp *udp,
3619
                                             Error **errp)
3620
{
3621
    int fd;
3622

    
3623
    fd = socket_dgram(udp->remote, udp->local, errp);
3624
    if (error_is_set(errp)) {
3625
        return NULL;
3626
    }
3627
    return qemu_chr_open_udp_fd(fd);
3628
}
3629

    
3630
ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
3631
                               Error **errp)
3632
{
3633
    ChardevReturn *ret = g_new0(ChardevReturn, 1);
3634
    CharDriverState *base, *chr = NULL;
3635

    
3636
    chr = qemu_chr_find(id);
3637
    if (chr) {
3638
        error_setg(errp, "Chardev '%s' already exists", id);
3639
        g_free(ret);
3640
        return NULL;
3641
    }
3642

    
3643
    switch (backend->kind) {
3644
    case CHARDEV_BACKEND_KIND_FILE:
3645
        chr = qmp_chardev_open_file(backend->file, errp);
3646
        break;
3647
    case CHARDEV_BACKEND_KIND_SERIAL:
3648
        chr = qmp_chardev_open_serial(backend->serial, errp);
3649
        break;
3650
    case CHARDEV_BACKEND_KIND_PARALLEL:
3651
        chr = qmp_chardev_open_parallel(backend->parallel, errp);
3652
        break;
3653
    case CHARDEV_BACKEND_KIND_PIPE:
3654
        chr = qemu_chr_open_pipe(backend->pipe);
3655
        break;
3656
    case CHARDEV_BACKEND_KIND_SOCKET:
3657
        chr = qmp_chardev_open_socket(backend->socket, errp);
3658
        break;
3659
    case CHARDEV_BACKEND_KIND_UDP:
3660
        chr = qmp_chardev_open_udp(backend->udp, errp);
3661
        break;
3662
#ifdef HAVE_CHARDEV_TTY
3663
    case CHARDEV_BACKEND_KIND_PTY:
3664
        chr = qemu_chr_open_pty(id, ret);
3665
        break;
3666
#endif
3667
    case CHARDEV_BACKEND_KIND_NULL:
3668
        chr = qemu_chr_open_null();
3669
        break;
3670
    case CHARDEV_BACKEND_KIND_MUX:
3671
        base = qemu_chr_find(backend->mux->chardev);
3672
        if (base == NULL) {
3673
            error_setg(errp, "mux: base chardev %s not found",
3674
                       backend->mux->chardev);
3675
            break;
3676
        }
3677
        chr = qemu_chr_open_mux(base);
3678
        break;
3679
    case CHARDEV_BACKEND_KIND_MSMOUSE:
3680
        chr = qemu_chr_open_msmouse();
3681
        break;
3682
#ifdef CONFIG_BRLAPI
3683
    case CHARDEV_BACKEND_KIND_BRAILLE:
3684
        chr = chr_baum_init();
3685
        break;
3686
#endif
3687
    case CHARDEV_BACKEND_KIND_STDIO:
3688
        chr = qemu_chr_open_stdio(backend->stdio);
3689
        break;
3690
#ifdef _WIN32
3691
    case CHARDEV_BACKEND_KIND_CONSOLE:
3692
        chr = qemu_chr_open_win_con();
3693
        break;
3694
#endif
3695
#ifdef CONFIG_SPICE
3696
    case CHARDEV_BACKEND_KIND_SPICEVMC:
3697
        chr = qemu_chr_open_spice_vmc(backend->spicevmc->type);
3698
        break;
3699
    case CHARDEV_BACKEND_KIND_SPICEPORT:
3700
        chr = qemu_chr_open_spice_port(backend->spiceport->fqdn);
3701
        break;
3702
#endif
3703
    case CHARDEV_BACKEND_KIND_VC:
3704
        chr = vc_init(backend->vc);
3705
        break;
3706
    case CHARDEV_BACKEND_KIND_MEMORY:
3707
        chr = qemu_chr_open_memory(backend->memory, errp);
3708
        break;
3709
    default:
3710
        error_setg(errp, "unknown chardev backend (%d)", backend->kind);
3711
        break;
3712
    }
3713

    
3714
    if (chr == NULL && !error_is_set(errp)) {
3715
        error_setg(errp, "Failed to create chardev");
3716
    }
3717
    if (chr) {
3718
        chr->label = g_strdup(id);
3719
        chr->avail_connections =
3720
            (backend->kind == CHARDEV_BACKEND_KIND_MUX) ? MAX_MUX : 1;
3721
        if (!chr->filename) {
3722
            chr->filename = g_strdup(ChardevBackendKind_lookup[backend->kind]);
3723
        }
3724
        if (!chr->explicit_be_open) {
3725
            qemu_chr_be_event(chr, CHR_EVENT_OPENED);
3726
        }
3727
        QTAILQ_INSERT_TAIL(&chardevs, chr, next);
3728
        return ret;
3729
    } else {
3730
        g_free(ret);
3731
        return NULL;
3732
    }
3733
}
3734

    
3735
void qmp_chardev_remove(const char *id, Error **errp)
3736
{
3737
    CharDriverState *chr;
3738

    
3739
    chr = qemu_chr_find(id);
3740
    if (NULL == chr) {
3741
        error_setg(errp, "Chardev '%s' not found", id);
3742
        return;
3743
    }
3744
    if (chr->chr_can_read || chr->chr_read ||
3745
        chr->chr_event || chr->handler_opaque) {
3746
        error_setg(errp, "Chardev '%s' is busy", id);
3747
        return;
3748
    }
3749
    qemu_chr_delete(chr);
3750
}
3751

    
3752
static void register_types(void)
3753
{
3754
    register_char_driver_qapi("null", CHARDEV_BACKEND_KIND_NULL, NULL);
3755
    register_char_driver("socket", qemu_chr_open_socket);
3756
    register_char_driver("udp", qemu_chr_open_udp);
3757
    register_char_driver_qapi("memory", CHARDEV_BACKEND_KIND_MEMORY,
3758
                              qemu_chr_parse_memory);
3759
    register_char_driver_qapi("file", CHARDEV_BACKEND_KIND_FILE,
3760
                              qemu_chr_parse_file_out);
3761
    register_char_driver_qapi("stdio", CHARDEV_BACKEND_KIND_STDIO,
3762
                              qemu_chr_parse_stdio);
3763
    register_char_driver_qapi("serial", CHARDEV_BACKEND_KIND_SERIAL,
3764
                              qemu_chr_parse_serial);
3765
    register_char_driver_qapi("tty", CHARDEV_BACKEND_KIND_SERIAL,
3766
                              qemu_chr_parse_serial);
3767
    register_char_driver_qapi("parallel", CHARDEV_BACKEND_KIND_PARALLEL,
3768
                              qemu_chr_parse_parallel);
3769
    register_char_driver_qapi("parport", CHARDEV_BACKEND_KIND_PARALLEL,
3770
                              qemu_chr_parse_parallel);
3771
    register_char_driver_qapi("pty", CHARDEV_BACKEND_KIND_PTY, NULL);
3772
    register_char_driver_qapi("console", CHARDEV_BACKEND_KIND_CONSOLE, NULL);
3773
    register_char_driver_qapi("pipe", CHARDEV_BACKEND_KIND_PIPE,
3774
                              qemu_chr_parse_pipe);
3775
}
3776

    
3777
type_init(register_types);