qemu/include/sysemu/char.h
<<
>>
Prefs
   1#ifndef QEMU_CHAR_H
   2#define QEMU_CHAR_H
   3
   4#include "qemu-common.h"
   5#include "qemu/queue.h"
   6#include "qemu/option.h"
   7#include "qemu/config-file.h"
   8#include "block/aio.h"
   9#include "qapi/qmp/qobject.h"
  10#include "qapi/qmp/qstring.h"
  11#include "qemu/main-loop.h"
  12#include "qemu/bitmap.h"
  13
  14/* character device */
  15
  16typedef enum {
  17    CHR_EVENT_BREAK, /* serial break char */
  18    CHR_EVENT_OPENED, /* new connection established */
  19    CHR_EVENT_MUX_IN, /* mux-focus was set to this terminal */
  20    CHR_EVENT_MUX_OUT, /* mux-focus will move on */
  21    CHR_EVENT_CLOSED /* connection closed */
  22} QEMUChrEvent;
  23
  24
  25#define CHR_IOCTL_SERIAL_SET_PARAMS   1
  26typedef struct {
  27    int speed;
  28    int parity;
  29    int data_bits;
  30    int stop_bits;
  31} QEMUSerialSetParams;
  32
  33#define CHR_IOCTL_SERIAL_SET_BREAK    2
  34
  35#define CHR_IOCTL_PP_READ_DATA        3
  36#define CHR_IOCTL_PP_WRITE_DATA       4
  37#define CHR_IOCTL_PP_READ_CONTROL     5
  38#define CHR_IOCTL_PP_WRITE_CONTROL    6
  39#define CHR_IOCTL_PP_READ_STATUS      7
  40#define CHR_IOCTL_PP_EPP_READ_ADDR    8
  41#define CHR_IOCTL_PP_EPP_READ         9
  42#define CHR_IOCTL_PP_EPP_WRITE_ADDR  10
  43#define CHR_IOCTL_PP_EPP_WRITE       11
  44#define CHR_IOCTL_PP_DATA_DIR        12
  45
  46struct ParallelIOArg {
  47    void *buffer;
  48    int count;
  49};
  50
  51#define CHR_IOCTL_SERIAL_SET_TIOCM   13
  52#define CHR_IOCTL_SERIAL_GET_TIOCM   14
  53
  54#define CHR_TIOCM_CTS   0x020
  55#define CHR_TIOCM_CAR   0x040
  56#define CHR_TIOCM_DSR   0x100
  57#define CHR_TIOCM_RI    0x080
  58#define CHR_TIOCM_DTR   0x002
  59#define CHR_TIOCM_RTS   0x004
  60
  61typedef void IOEventHandler(void *opaque, int event);
  62
  63typedef enum {
  64    /* Whether the chardev peer is able to close and
  65     * reopen the data channel, thus requiring support
  66     * for qemu_chr_wait_connected() to wait for a
  67     * valid connection */
  68    QEMU_CHAR_FEATURE_RECONNECTABLE,
  69    /* Whether it is possible to send/recv file descriptors
  70     * over the data channel */
  71    QEMU_CHAR_FEATURE_FD_PASS,
  72
  73    QEMU_CHAR_FEATURE_LAST,
  74} CharDriverFeature;
  75
  76/* This is the backend as seen by frontend, the actual backend is
  77 * CharDriverState */
  78typedef struct CharBackend {
  79    CharDriverState *chr;
  80    IOEventHandler *chr_event;
  81    IOCanReadHandler *chr_can_read;
  82    IOReadHandler *chr_read;
  83    void *opaque;
  84    int tag;
  85    int fe_open;
  86} CharBackend;
  87
  88struct CharDriverState {
  89    QemuMutex chr_write_lock;
  90    int (*chr_write)(struct CharDriverState *s, const uint8_t *buf, int len);
  91    int (*chr_sync_read)(struct CharDriverState *s,
  92                         const uint8_t *buf, int len);
  93    GSource *(*chr_add_watch)(struct CharDriverState *s, GIOCondition cond);
  94    void (*chr_update_read_handler)(struct CharDriverState *s,
  95                                    GMainContext *context);
  96    int (*chr_ioctl)(struct CharDriverState *s, int cmd, void *arg);
  97    int (*get_msgfds)(struct CharDriverState *s, int* fds, int num);
  98    int (*set_msgfds)(struct CharDriverState *s, int *fds, int num);
  99    int (*chr_add_client)(struct CharDriverState *chr, int fd);
 100    int (*chr_wait_connected)(struct CharDriverState *chr, Error **errp);
 101    void (*chr_free)(struct CharDriverState *chr);
 102    void (*chr_disconnect)(struct CharDriverState *chr);
 103    void (*chr_accept_input)(struct CharDriverState *chr);
 104    void (*chr_set_echo)(struct CharDriverState *chr, bool echo);
 105    void (*chr_set_fe_open)(struct CharDriverState *chr, int fe_open);
 106    void (*chr_set_blocking)(struct CharDriverState *chr, bool blocking);
 107    CharBackend *be;
 108    void *opaque;
 109    char *label;
 110    char *filename;
 111    int logfd;
 112    int be_open;
 113    int is_mux;
 114    guint fd_in_tag;
 115    bool replay;
 116    DECLARE_BITMAP(features, QEMU_CHAR_FEATURE_LAST);
 117    QTAILQ_ENTRY(CharDriverState) next;
 118};
 119
 120/**
 121 * qemu_chr_alloc:
 122 * @backend: the common backend config
 123 * @errp: pointer to a NULL-initialized error object
 124 *
 125 * Allocate and initialize a new CharDriverState.
 126 *
 127 * Returns: a newly allocated CharDriverState, or NULL on error.
 128 */
 129CharDriverState *qemu_chr_alloc(ChardevCommon *backend, Error **errp);
 130
 131/**
 132 * @qemu_chr_new_from_opts:
 133 *
 134 * Create a new character backend from a QemuOpts list.
 135 *
 136 * @opts see qemu-config.c for a list of valid options
 137 *
 138 * Returns: a new character backend
 139 */
 140CharDriverState *qemu_chr_new_from_opts(QemuOpts *opts,
 141                                        Error **errp);
 142
 143/**
 144 * @qemu_chr_parse_common:
 145 *
 146 * Parse the common options available to all character backends.
 147 *
 148 * @opts the options that still need parsing
 149 * @backend a new backend
 150 */
 151void qemu_chr_parse_common(QemuOpts *opts, ChardevCommon *backend);
 152
 153/**
 154 * @qemu_chr_new:
 155 *
 156 * Create a new character backend from a URI.
 157 *
 158 * @label the name of the backend
 159 * @filename the URI
 160 *
 161 * Returns: a new character backend
 162 */
 163CharDriverState *qemu_chr_new(const char *label, const char *filename);
 164
 165
 166/**
 167 * @qemu_chr_fe_disconnect:
 168 *
 169 * Close a fd accpeted by character backend.
 170 * Without associated CharDriver, do nothing.
 171 */
 172void qemu_chr_fe_disconnect(CharBackend *be);
 173
 174/**
 175 * @qemu_chr_cleanup:
 176 *
 177 * Delete all chardevs (when leaving qemu)
 178 */
 179void qemu_chr_cleanup(void);
 180
 181/**
 182 * @qemu_chr_fe_wait_connected:
 183 *
 184 * Wait for characted backend to be connected, return < 0 on error or
 185 * if no assicated CharDriver.
 186 */
 187int qemu_chr_fe_wait_connected(CharBackend *be, Error **errp);
 188
 189/**
 190 * @qemu_chr_new_noreplay:
 191 *
 192 * Create a new character backend from a URI.
 193 * Character device communications are not written
 194 * into the replay log.
 195 *
 196 * @label the name of the backend
 197 * @filename the URI
 198 *
 199 * Returns: a new character backend
 200 */
 201CharDriverState *qemu_chr_new_noreplay(const char *label, const char *filename);
 202
 203/**
 204 * @qemu_chr_delete:
 205 *
 206 * Destroy a character backend and remove it from the list of
 207 * identified character backends.
 208 */
 209void qemu_chr_delete(CharDriverState *chr);
 210
 211/**
 212 * @qemu_chr_free:
 213 *
 214 * Destroy a character backend.
 215 */
 216void qemu_chr_free(CharDriverState *chr);
 217
 218/**
 219 * @qemu_chr_fe_set_blocking:
 220 *
 221 * Ask the backend to override its normal blocking setting.  This only really
 222 * applies to socket IO not handled by QEMU's main-loop.
 223 *
 224 * @blocking true to enable blocking, false to disable blocking mode
 225 */
 226void qemu_chr_fe_set_blocking(CharBackend *be, bool blocking);
 227
 228/**
 229 * @qemu_chr_fe_set_echo:
 230 *
 231 * Ask the backend to override its normal echo setting.  This only really
 232 * applies to the stdio backend and is used by the QMP server such that you
 233 * can see what you type if you try to type QMP commands.
 234 * Without associated CharDriver, do nothing.
 235 *
 236 * @echo true to enable echo, false to disable echo
 237 */
 238void qemu_chr_fe_set_echo(CharBackend *be, bool echo);
 239
 240/**
 241 * @qemu_chr_fe_set_open:
 242 *
 243 * Set character frontend open status.  This is an indication that the
 244 * front end is ready (or not) to begin doing I/O.
 245 * Without associated CharDriver, do nothing.
 246 */
 247void qemu_chr_fe_set_open(CharBackend *be, int fe_open);
 248
 249/**
 250 * @qemu_chr_fe_printf:
 251 *
 252 * Write to a character backend using a printf style interface.  This
 253 * function is thread-safe. It does nothing without associated
 254 * CharDriver.
 255 *
 256 * @fmt see #printf
 257 */
 258void qemu_chr_fe_printf(CharBackend *be, const char *fmt, ...)
 259    GCC_FMT_ATTR(2, 3);
 260
 261/**
 262 * @qemu_chr_fe_add_watch:
 263 *
 264 * If the backend is connected, create and add a #GSource that fires
 265 * when the given condition (typically G_IO_OUT|G_IO_HUP or G_IO_HUP)
 266 * is active; return the #GSource's tag.  If it is disconnected,
 267 * or without associated CharDriver, return 0.
 268 *
 269 * @cond the condition to poll for
 270 * @func the function to call when the condition happens
 271 * @user_data the opaque pointer to pass to @func
 272 */
 273guint qemu_chr_fe_add_watch(CharBackend *be, GIOCondition cond,
 274                            GIOFunc func, void *user_data);
 275
 276/**
 277 * @qemu_chr_fe_write:
 278 *
 279 * Write data to a character backend from the front end.  This function
 280 * will send data from the front end to the back end.  This function
 281 * is thread-safe.
 282 *
 283 * @buf the data
 284 * @len the number of bytes to send
 285 *
 286 * Returns: the number of bytes consumed (0 if no assicated CharDriver)
 287 */
 288int qemu_chr_fe_write(CharBackend *be, const uint8_t *buf, int len);
 289
 290/**
 291 * @qemu_chr_fe_write_all:
 292 *
 293 * Write data to a character backend from the front end.  This function will
 294 * send data from the front end to the back end.  Unlike @qemu_chr_fe_write,
 295 * this function will block if the back end cannot consume all of the data
 296 * attempted to be written.  This function is thread-safe.
 297 *
 298 * @buf the data
 299 * @len the number of bytes to send
 300 *
 301 * Returns: the number of bytes consumed (0 if no assicated CharDriver)
 302 */
 303int qemu_chr_fe_write_all(CharBackend *be, const uint8_t *buf, int len);
 304
 305/**
 306 * @qemu_chr_fe_read_all:
 307 *
 308 * Read data to a buffer from the back end.
 309 *
 310 * @buf the data buffer
 311 * @len the number of bytes to read
 312 *
 313 * Returns: the number of bytes read (0 if no assicated CharDriver)
 314 */
 315int qemu_chr_fe_read_all(CharBackend *be, uint8_t *buf, int len);
 316
 317/**
 318 * @qemu_chr_fe_ioctl:
 319 *
 320 * Issue a device specific ioctl to a backend.  This function is thread-safe.
 321 *
 322 * @cmd see CHR_IOCTL_*
 323 * @arg the data associated with @cmd
 324 *
 325 * Returns: if @cmd is not supported by the backend or there is no
 326 *          associated CharDriver, -ENOTSUP, otherwise the return
 327 *          value depends on the semantics of @cmd
 328 */
 329int qemu_chr_fe_ioctl(CharBackend *be, int cmd, void *arg);
 330
 331/**
 332 * @qemu_chr_fe_get_msgfd:
 333 *
 334 * For backends capable of fd passing, return the latest file descriptor passed
 335 * by a client.
 336 *
 337 * Returns: -1 if fd passing isn't supported or there is no pending file
 338 *          descriptor.  If a file descriptor is returned, subsequent calls to
 339 *          this function will return -1 until a client sends a new file
 340 *          descriptor.
 341 */
 342int qemu_chr_fe_get_msgfd(CharBackend *be);
 343
 344/**
 345 * @qemu_chr_fe_get_msgfds:
 346 *
 347 * For backends capable of fd passing, return the number of file received
 348 * descriptors and fills the fds array up to num elements
 349 *
 350 * Returns: -1 if fd passing isn't supported or there are no pending file
 351 *          descriptors.  If file descriptors are returned, subsequent calls to
 352 *          this function will return -1 until a client sends a new set of file
 353 *          descriptors.
 354 */
 355int qemu_chr_fe_get_msgfds(CharBackend *be, int *fds, int num);
 356
 357/**
 358 * @qemu_chr_fe_set_msgfds:
 359 *
 360 * For backends capable of fd passing, set an array of fds to be passed with
 361 * the next send operation.
 362 * A subsequent call to this function before calling a write function will
 363 * result in overwriting the fd array with the new value without being send.
 364 * Upon writing the message the fd array is freed.
 365 *
 366 * Returns: -1 if fd passing isn't supported or no associated CharDriver.
 367 */
 368int qemu_chr_fe_set_msgfds(CharBackend *be, int *fds, int num);
 369
 370/**
 371 * @qemu_chr_be_can_write:
 372 *
 373 * Determine how much data the front end can currently accept.  This function
 374 * returns the number of bytes the front end can accept.  If it returns 0, the
 375 * front end cannot receive data at the moment.  The function must be polled
 376 * to determine when data can be received.
 377 *
 378 * Returns: the number of bytes the front end can receive via @qemu_chr_be_write
 379 */
 380int qemu_chr_be_can_write(CharDriverState *s);
 381
 382/**
 383 * @qemu_chr_be_write:
 384 *
 385 * Write data from the back end to the front end.  Before issuing this call,
 386 * the caller should call @qemu_chr_be_can_write to determine how much data
 387 * the front end can currently accept.
 388 *
 389 * @buf a buffer to receive data from the front end
 390 * @len the number of bytes to receive from the front end
 391 */
 392void qemu_chr_be_write(CharDriverState *s, uint8_t *buf, int len);
 393
 394/**
 395 * @qemu_chr_be_write_impl:
 396 *
 397 * Implementation of back end writing. Used by replay module.
 398 *
 399 * @buf a buffer to receive data from the front end
 400 * @len the number of bytes to receive from the front end
 401 */
 402void qemu_chr_be_write_impl(CharDriverState *s, uint8_t *buf, int len);
 403
 404/**
 405 * @qemu_chr_be_event:
 406 *
 407 * Send an event from the back end to the front end.
 408 *
 409 * @event the event to send
 410 */
 411void qemu_chr_be_event(CharDriverState *s, int event);
 412
 413/**
 414 * @qemu_chr_fe_init:
 415 *
 416 * Initializes a front end for the given CharBackend and
 417 * CharDriver. Call qemu_chr_fe_deinit() to remove the association and
 418 * release the driver.
 419 *
 420 * Returns: false on error.
 421 */
 422bool qemu_chr_fe_init(CharBackend *b, CharDriverState *s, Error **errp);
 423
 424/**
 425 * @qemu_chr_fe_get_driver:
 426 *
 427 * Returns the driver associated with a CharBackend or NULL if no
 428 * associated CharDriver.
 429 */
 430CharDriverState *qemu_chr_fe_get_driver(CharBackend *be);
 431
 432/**
 433 * @qemu_chr_fe_deinit:
 434 *
 435 * Dissociate the CharBackend from the CharDriver.
 436 *
 437 * Safe to call without associated CharDriver.
 438 */
 439void qemu_chr_fe_deinit(CharBackend *b);
 440
 441/**
 442 * @qemu_chr_fe_set_handlers:
 443 * @b: a CharBackend
 444 * @fd_can_read: callback to get the amount of data the frontend may
 445 *               receive
 446 * @fd_read: callback to receive data from char
 447 * @fd_event: event callback
 448 * @opaque: an opaque pointer for the callbacks
 449 * @context: a main loop context or NULL for the default
 450 * @set_open: whether to call qemu_chr_fe_set_open() implicitely when
 451 * any of the handler is non-NULL
 452 *
 453 * Set the front end char handlers. The front end takes the focus if
 454 * any of the handler is non-NULL.
 455 *
 456 * Without associated CharDriver, nothing is changed.
 457 */
 458void qemu_chr_fe_set_handlers(CharBackend *b,
 459                              IOCanReadHandler *fd_can_read,
 460                              IOReadHandler *fd_read,
 461                              IOEventHandler *fd_event,
 462                              void *opaque,
 463                              GMainContext *context,
 464                              bool set_open);
 465
 466/**
 467 * @qemu_chr_fe_take_focus:
 468 *
 469 * Take the focus (if the front end is muxed).
 470 *
 471 * Without associated CharDriver, nothing is changed.
 472 */
 473void qemu_chr_fe_take_focus(CharBackend *b);
 474
 475void qemu_chr_be_generic_open(CharDriverState *s);
 476void qemu_chr_fe_accept_input(CharBackend *be);
 477int qemu_chr_add_client(CharDriverState *s, int fd);
 478CharDriverState *qemu_chr_find(const char *name);
 479bool chr_is_ringbuf(const CharDriverState *chr);
 480
 481bool qemu_chr_has_feature(CharDriverState *chr,
 482                          CharDriverFeature feature);
 483void qemu_chr_set_feature(CharDriverState *chr,
 484                          CharDriverFeature feature);
 485QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename);
 486
 487typedef void CharDriverParse(QemuOpts *opts, ChardevBackend *backend,
 488                             Error **errp);
 489typedef CharDriverState *CharDriverCreate(const char *id,
 490                                          ChardevBackend *backend,
 491                                          ChardevReturn *ret, bool *be_opened,
 492                                          Error **errp);
 493
 494void register_char_driver(const char *name, ChardevBackendKind kind,
 495                          CharDriverParse *parse, CharDriverCreate *create);
 496
 497extern int term_escape_char;
 498
 499
 500/* console.c */
 501typedef CharDriverState *(VcHandler)(ChardevVC *vc, Error **errp);
 502void register_vc_handler(VcHandler *handler);
 503
 504#endif
 505