char.h 14.9 KB
Newer Older
P
pbrook 已提交
1 2 3
#ifndef QEMU_CHAR_H
#define QEMU_CHAR_H

A
aliguori 已提交
4
#include "qemu-common.h"
5 6 7
#include "qemu/queue.h"
#include "qemu/option.h"
#include "qemu/config-file.h"
8
#include "block/aio.h"
9 10
#include "qapi/qmp/qobject.h"
#include "qapi/qmp/qstring.h"
11
#include "qemu/main-loop.h"
12
#include "qemu/bitmap.h"
A
aliguori 已提交
13

P
pbrook 已提交
14 15
/* character device */

16 17
#define CHR_EVENT_BREAK   0 /* serial break char */
#define CHR_EVENT_FOCUS   1 /* focus to this terminal (modal input needed) */
18
#define CHR_EVENT_OPENED  2 /* new connection established */
19 20
#define CHR_EVENT_MUX_IN  3 /* mux-focus was set to this terminal */
#define CHR_EVENT_MUX_OUT 4 /* mux-focus will move on */
21
#define CHR_EVENT_CLOSED  5 /* connection closed */
P
pbrook 已提交
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42


#define CHR_IOCTL_SERIAL_SET_PARAMS   1
typedef struct {
    int speed;
    int parity;
    int data_bits;
    int stop_bits;
} QEMUSerialSetParams;

#define CHR_IOCTL_SERIAL_SET_BREAK    2

#define CHR_IOCTL_PP_READ_DATA        3
#define CHR_IOCTL_PP_WRITE_DATA       4
#define CHR_IOCTL_PP_READ_CONTROL     5
#define CHR_IOCTL_PP_WRITE_CONTROL    6
#define CHR_IOCTL_PP_READ_STATUS      7
#define CHR_IOCTL_PP_EPP_READ_ADDR    8
#define CHR_IOCTL_PP_EPP_READ         9
#define CHR_IOCTL_PP_EPP_WRITE_ADDR  10
#define CHR_IOCTL_PP_EPP_WRITE       11
A
aurel32 已提交
43
#define CHR_IOCTL_PP_DATA_DIR        12
P
pbrook 已提交
44

45 46 47 48 49
struct ParallelIOArg {
    void *buffer;
    int count;
};

A
aurel32 已提交
50 51
#define CHR_IOCTL_SERIAL_SET_TIOCM   13
#define CHR_IOCTL_SERIAL_GET_TIOCM   14
52 53 54 55 56 57 58 59

#define CHR_TIOCM_CTS	0x020
#define CHR_TIOCM_CAR	0x040
#define CHR_TIOCM_DSR	0x100
#define CHR_TIOCM_RI	0x080
#define CHR_TIOCM_DTR	0x002
#define CHR_TIOCM_RTS	0x004

P
pbrook 已提交
60 61
typedef void IOEventHandler(void *opaque, int event);

62 63 64 65 66 67 68 69 70 71 72 73 74
typedef enum {
    /* Whether the chardev peer is able to close and
     * reopen the data channel, thus requiring support
     * for qemu_chr_wait_connected() to wait for a
     * valid connection */
    QEMU_CHAR_FEATURE_RECONNECTABLE,
    /* Whether it is possible to send/recv file descriptors
     * over the data channel */
    QEMU_CHAR_FEATURE_FD_PASS,

    QEMU_CHAR_FEATURE_LAST,
} CharDriverFeature;

M
Marc-André Lureau 已提交
75 76 77 78 79 80
/* This is the backend as seen by frontend, the actual backend is
 * CharDriverState */
typedef struct CharBackend {
    CharDriverState *chr;
    int tag;
} CharBackend;
81

P
pbrook 已提交
82
struct CharDriverState {
83
    QemuMutex chr_write_lock;
P
pbrook 已提交
84
    int (*chr_write)(struct CharDriverState *s, const uint8_t *buf, int len);
85 86
    int (*chr_sync_read)(struct CharDriverState *s,
                         const uint8_t *buf, int len);
A
Anthony Liguori 已提交
87
    GSource *(*chr_add_watch)(struct CharDriverState *s, GIOCondition cond);
88
    void (*chr_update_read_handler)(struct CharDriverState *s,
89
                                    GMainContext *context, int tag);
P
pbrook 已提交
90
    int (*chr_ioctl)(struct CharDriverState *s, int cmd, void *arg);
91
    int (*get_msgfds)(struct CharDriverState *s, int* fds, int num);
92
    int (*set_msgfds)(struct CharDriverState *s, int *fds, int num);
93
    int (*chr_add_client)(struct CharDriverState *chr, int fd);
94
    int (*chr_wait_connected)(struct CharDriverState *chr, Error **errp);
P
pbrook 已提交
95
    IOEventHandler *chr_event;
96
    IOCanReadHandler *chr_can_read;
P
pbrook 已提交
97 98 99
    IOReadHandler *chr_read;
    void *handler_opaque;
    void (*chr_close)(struct CharDriverState *chr);
100
    void (*chr_disconnect)(struct CharDriverState *chr);
101
    void (*chr_accept_input)(struct CharDriverState *chr);
P
Paolo Bonzini 已提交
102
    void (*chr_set_echo)(struct CharDriverState *chr, bool echo);
103
    void (*chr_set_fe_open)(struct CharDriverState *chr, int fe_open);
M
Marc-André Lureau 已提交
104
    void (*chr_fe_event)(struct CharDriverState *chr, int event);
P
pbrook 已提交
105
    void *opaque;
106 107
    char *label;
    char *filename;
108
    int logfd;
109
    int be_open;
H
Hans de Goede 已提交
110
    int fe_open;
111
    int explicit_fe_open;
112
    int explicit_be_open;
113
    int avail_connections;
114
    int is_mux;
115
    guint fd_in_tag;
P
Pavel Dovgalyuk 已提交
116
    bool replay;
117
    DECLARE_BITMAP(features, QEMU_CHAR_FEATURE_LAST);
B
Blue Swirl 已提交
118
    QTAILQ_ENTRY(CharDriverState) next;
P
pbrook 已提交
119 120
};

121
/**
122 123 124
 * qemu_chr_alloc:
 * @backend: the common backend config
 * @errp: pointer to a NULL-initialized error object
125 126 127
 *
 * Allocate and initialize a new CharDriverState.
 *
128
 * Returns: a newly allocated CharDriverState, or NULL on error.
129
 */
130
CharDriverState *qemu_chr_alloc(ChardevCommon *backend, Error **errp);
131

132 133 134 135 136 137 138 139 140
/**
 * @qemu_chr_new_from_opts:
 *
 * Create a new character backend from a QemuOpts list.
 *
 * @opts see qemu-config.c for a list of valid options
 *
 * Returns: a new character backend
 */
141
CharDriverState *qemu_chr_new_from_opts(QemuOpts *opts,
M
Marc-André Lureau 已提交
142
                                        Error **errp);
143

144 145 146 147 148 149 150 151 152 153
/**
 * @qemu_chr_parse_common:
 *
 * Parse the common options available to all character backends.
 *
 * @opts the options that still need parsing
 * @backend a new backend
 */
void qemu_chr_parse_common(QemuOpts *opts, ChardevCommon *backend);

154 155 156 157 158 159 160 161 162 163
/**
 * @qemu_chr_new:
 *
 * Create a new character backend from a URI.
 *
 * @label the name of the backend
 * @filename the URI
 *
 * Returns: a new character backend
 */
M
Marc-André Lureau 已提交
164
CharDriverState *qemu_chr_new(const char *label, const char *filename);
M
Marc-André Lureau 已提交
165 166


167
/**
168
 * @qemu_chr_fe_disconnect:
169 170 171
 *
 * Close a fd accpeted by character backend.
 */
172
void qemu_chr_fe_disconnect(CharDriverState *chr);
173

174 175 176 177 178 179 180
/**
 * @qemu_chr_cleanup:
 *
 * Delete all chardevs (when leaving qemu)
 */
void qemu_chr_cleanup(void);

181 182 183 184 185 186 187
/**
 * @qemu_chr_wait_connected:
 *
 * Wait for characted backend to be connected.
 */
int qemu_chr_wait_connected(CharDriverState *chr, Error **errp);

P
Pavel Dovgalyuk 已提交
188 189 190 191 192 193 194 195 196 197 198 199
/**
 * @qemu_chr_new_noreplay:
 *
 * Create a new character backend from a URI.
 * Character device communications are not written
 * into the replay log.
 *
 * @label the name of the backend
 * @filename the URI
 *
 * Returns: a new character backend
 */
M
Marc-André Lureau 已提交
200
CharDriverState *qemu_chr_new_noreplay(const char *label, const char *filename);
P
Pavel Dovgalyuk 已提交
201

202 203 204
/**
 * @qemu_chr_delete:
 *
M
Marc-André Lureau 已提交
205 206
 * Destroy a character backend and remove it from the list of
 * identified character backends.
207 208 209
 */
void qemu_chr_delete(CharDriverState *chr);

M
Marc-André Lureau 已提交
210 211 212 213 214 215 216
/**
 * @qemu_chr_free:
 *
 * Destroy a character backend.
 */
void qemu_chr_free(CharDriverState *chr);

217 218 219 220 221 222 223 224 225
/**
 * @qemu_chr_fe_set_echo:
 *
 * Ask the backend to override its normal echo setting.  This only really
 * applies to the stdio backend and is used by the QMP server such that you
 * can see what you type if you try to type QMP commands.
 *
 * @echo true to enable echo, false to disable echo
 */
226
void qemu_chr_fe_set_echo(struct CharDriverState *chr, bool echo);
227 228

/**
229
 * @qemu_chr_fe_set_open:
230
 *
231 232
 * Set character frontend open status.  This is an indication that the
 * front end is ready (or not) to begin doing I/O.
233
 */
234
void qemu_chr_fe_set_open(struct CharDriverState *chr, int fe_open);
235

M
Marc-André Lureau 已提交
236 237 238 239 240 241 242 243 244
/**
 * @qemu_chr_fe_event:
 *
 * Send an event from the front end to the back end.
 *
 * @event the event to send
 */
void qemu_chr_fe_event(CharDriverState *s, int event);

245 246 247 248
/**
 * @qemu_chr_fe_printf:
 *
 * Write to a character backend using a printf style interface.
249
 * This function is thread-safe.
250 251 252
 *
 * @fmt see #printf
 */
253
void qemu_chr_fe_printf(CharDriverState *s, const char *fmt, ...)
S
Stefan Weil 已提交
254
    GCC_FMT_ATTR(2, 3);
255

256 257 258 259 260 261 262 263 264 265 266 267 268 269
/**
 * @qemu_chr_fe_add_watch:
 *
 * If the backend is connected, create and add a #GSource that fires
 * when the given condition (typically G_IO_OUT|G_IO_HUP or G_IO_HUP)
 * is active; return the #GSource's tag.  If it is disconnected,
 * return 0.
 *
 * @cond the condition to poll for
 * @func the function to call when the condition happens
 * @user_data the opaque pointer to pass to @func
 */
guint qemu_chr_fe_add_watch(CharDriverState *s, GIOCondition cond,
                            GIOFunc func, void *user_data);
A
Anthony Liguori 已提交
270

271 272 273
/**
 * @qemu_chr_fe_write:
 *
274 275 276
 * Write data to a character backend from the front end.  This function
 * will send data from the front end to the back end.  This function
 * is thread-safe.
277 278 279 280 281 282
 *
 * @buf the data
 * @len the number of bytes to send
 *
 * Returns: the number of bytes consumed
 */
283
int qemu_chr_fe_write(CharDriverState *s, const uint8_t *buf, int len);
284

285 286 287 288 289 290
/**
 * @qemu_chr_fe_write_all:
 *
 * Write data to a character backend from the front end.  This function will
 * send data from the front end to the back end.  Unlike @qemu_chr_fe_write,
 * this function will block if the back end cannot consume all of the data
291
 * attempted to be written.  This function is thread-safe.
292 293 294 295 296 297 298 299
 *
 * @buf the data
 * @len the number of bytes to send
 *
 * Returns: the number of bytes consumed
 */
int qemu_chr_fe_write_all(CharDriverState *s, const uint8_t *buf, int len);

300 301 302 303 304 305 306 307 308 309 310 311
/**
 * @qemu_chr_fe_read_all:
 *
 * Read data to a buffer from the back end.
 *
 * @buf the data buffer
 * @len the number of bytes to read
 *
 * Returns: the number of bytes read
 */
int qemu_chr_fe_read_all(CharDriverState *s, uint8_t *buf, int len);

312 313 314
/**
 * @qemu_chr_fe_ioctl:
 *
315
 * Issue a device specific ioctl to a backend.  This function is thread-safe.
316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337
 *
 * @cmd see CHR_IOCTL_*
 * @arg the data associated with @cmd
 *
 * Returns: if @cmd is not supported by the backend, -ENOTSUP, otherwise the
 *          return value depends on the semantics of @cmd
 */
int qemu_chr_fe_ioctl(CharDriverState *s, int cmd, void *arg);

/**
 * @qemu_chr_fe_get_msgfd:
 *
 * For backends capable of fd passing, return the latest file descriptor passed
 * by a client.
 *
 * Returns: -1 if fd passing isn't supported or there is no pending file
 *          descriptor.  If a file descriptor is returned, subsequent calls to
 *          this function will return -1 until a client sends a new file
 *          descriptor.
 */
int qemu_chr_fe_get_msgfd(CharDriverState *s);

338 339 340 341 342 343 344 345 346 347 348 349 350
/**
 * @qemu_chr_fe_get_msgfds:
 *
 * For backends capable of fd passing, return the number of file received
 * descriptors and fills the fds array up to num elements
 *
 * Returns: -1 if fd passing isn't supported or there are no pending file
 *          descriptors.  If file descriptors are returned, subsequent calls to
 *          this function will return -1 until a client sends a new set of file
 *          descriptors.
 */
int qemu_chr_fe_get_msgfds(CharDriverState *s, int *fds, int num);

351 352 353 354 355 356 357 358 359 360 361 362 363
/**
 * @qemu_chr_fe_set_msgfds:
 *
 * For backends capable of fd passing, set an array of fds to be passed with
 * the next send operation.
 * A subsequent call to this function before calling a write function will
 * result in overwriting the fd array with the new value without being send.
 * Upon writing the message the fd array is freed.
 *
 * Returns: -1 if fd passing isn't supported.
 */
int qemu_chr_fe_set_msgfds(CharDriverState *s, int *fds, int num);

364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383
/**
 * @qemu_chr_fe_claim:
 *
 * Claim a backend before using it, should be called before calling
 * qemu_chr_add_handlers(). 
 *
 * Returns: -1 if the backend is already in use by another frontend, 0 on
 *          success.
 */
int qemu_chr_fe_claim(CharDriverState *s);

/**
 * @qemu_chr_fe_claim_no_fail:
 *
 * Like qemu_chr_fe_claim, but will exit qemu with an error when the
 * backend is already in use.
 */
void qemu_chr_fe_claim_no_fail(CharDriverState *s);

/**
M
Marc-André Lureau 已提交
384
 * @qemu_chr_fe_release:
385 386 387 388 389 390 391 392
 *
 * Release a backend for use by another frontend.
 *
 * Returns: -1 if the backend is already in use by another frontend, 0 on
 *          success.
 */
void qemu_chr_fe_release(CharDriverState *s);

393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416
/**
 * @qemu_chr_be_can_write:
 *
 * Determine how much data the front end can currently accept.  This function
 * returns the number of bytes the front end can accept.  If it returns 0, the
 * front end cannot receive data at the moment.  The function must be polled
 * to determine when data can be received.
 *
 * Returns: the number of bytes the front end can receive via @qemu_chr_be_write
 */
int qemu_chr_be_can_write(CharDriverState *s);

/**
 * @qemu_chr_be_write:
 *
 * Write data from the back end to the front end.  Before issuing this call,
 * the caller should call @qemu_chr_be_can_write to determine how much data
 * the front end can currently accept.
 *
 * @buf a buffer to receive data from the front end
 * @len the number of bytes to receive from the front end
 */
void qemu_chr_be_write(CharDriverState *s, uint8_t *buf, int len);

P
Pavel Dovgalyuk 已提交
417 418 419 420 421 422 423 424 425
/**
 * @qemu_chr_be_write_impl:
 *
 * Implementation of back end writing. Used by replay module.
 *
 * @buf a buffer to receive data from the front end
 * @len the number of bytes to receive from the front end
 */
void qemu_chr_be_write_impl(CharDriverState *s, uint8_t *buf, int len);
426 427 428 429 430 431 432 433 434 435

/**
 * @qemu_chr_be_event:
 *
 * Send an event from the back end to the front end.
 *
 * @event the event to send
 */
void qemu_chr_be_event(CharDriverState *s, int event);

M
Marc-André Lureau 已提交
436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477
/**
 * @qemu_chr_fe_init:
 *
 * Initializes a front end for the given CharBackend and CharDriver.
 *
 * Returns: false on error.
 */
bool qemu_chr_fe_init(CharBackend *b, CharDriverState *s, Error **errp);

/**
 * @qemu_chr_fe_get_driver:
 *
 * Returns the driver associated with a CharBackend or NULL.
 */
CharDriverState *qemu_chr_fe_get_driver(CharBackend *be);

/**
 * @qemu_chr_fe_set_handlers:
 * @b: a CharBackend
 * @fd_can_read: callback to get the amount of data the frontend may
 *               receive
 * @fd_read: callback to receive data from char
 * @fd_event: event callback
 * @opaque: an opaque pointer for the callbacks
 * @context: a main loop context or NULL for the default
 *
 * Set the front end char handlers.
 */
void qemu_chr_fe_set_handlers(CharBackend *b,
                              IOCanReadHandler *fd_can_read,
                              IOReadHandler *fd_read,
                              IOEventHandler *fd_event,
                              void *opaque,
                              GMainContext *context);

/**
 * @qemu_chr_fe_take_focus:
 *
 * Take the focus (if the front end is muxed)
 */
void qemu_chr_fe_take_focus(CharBackend *b);

P
pbrook 已提交
478
void qemu_chr_add_handlers(CharDriverState *s,
479
                           IOCanReadHandler *fd_can_read,
P
pbrook 已提交
480 481 482
                           IOReadHandler *fd_read,
                           IOEventHandler *fd_event,
                           void *opaque);
483

484 485 486 487 488 489 490 491
/* This API can make handler run in the context what you pass to. */
void qemu_chr_add_handlers_full(CharDriverState *s,
                                IOCanReadHandler *fd_can_read,
                                IOReadHandler *fd_read,
                                IOEventHandler *fd_event,
                                void *opaque,
                                GMainContext *context);

492
void qemu_chr_be_generic_open(CharDriverState *s);
493
void qemu_chr_fe_accept_input(CharDriverState *s);
494
int qemu_chr_add_client(CharDriverState *s, int fd);
G
Gerd Hoffmann 已提交
495
CharDriverState *qemu_chr_find(const char *name);
496
bool chr_is_ringbuf(const CharDriverState *chr);
P
pbrook 已提交
497

498 499 500 501
bool qemu_chr_has_feature(CharDriverState *chr,
                          CharDriverFeature feature);
void qemu_chr_set_feature(CharDriverState *chr,
                          CharDriverFeature feature);
502 503
QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename);

504
void register_char_driver(const char *name, ChardevBackendKind kind,
505 506 507
        void (*parse)(QemuOpts *opts, ChardevBackend *backend, Error **errp),
        CharDriverState *(*create)(const char *id, ChardevBackend *backend,
                                   ChardevReturn *ret, Error **errp));
508

509 510
extern int term_escape_char;

A
Anthony Liguori 已提交
511

512
/* console.c */
513
typedef CharDriverState *(VcHandler)(ChardevVC *vc, Error **errp);
514
void register_vc_handler(VcHandler *handler);
515

P
pbrook 已提交
516
#endif