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
  13/* character device */
  14
  15#define CHR_EVENT_BREAK   0 /* serial break char */
  16#define CHR_EVENT_FOCUS   1 /* focus to this terminal (modal input needed) */
  17#define CHR_EVENT_OPENED  2 /* new connection established */
  18#define CHR_EVENT_MUX_IN  3 /* mux-focus was set to this terminal */
  19#define CHR_EVENT_MUX_OUT 4 /* mux-focus will move on */
  20#define CHR_EVENT_CLOSED  5 /* connection closed */
  21
  22
  23#define CHR_IOCTL_SERIAL_SET_PARAMS   1
  24typedef struct {
  25    int speed;
  26    int parity;
  27    int data_bits;
  28    int stop_bits;
  29} QEMUSerialSetParams;
  30
  31#define CHR_IOCTL_SERIAL_SET_BREAK    2
  32
  33#define CHR_IOCTL_PP_READ_DATA        3
  34#define CHR_IOCTL_PP_WRITE_DATA       4
  35#define CHR_IOCTL_PP_READ_CONTROL     5
  36#define CHR_IOCTL_PP_WRITE_CONTROL    6
  37#define CHR_IOCTL_PP_READ_STATUS      7
  38#define CHR_IOCTL_PP_EPP_READ_ADDR    8
  39#define CHR_IOCTL_PP_EPP_READ         9
  40#define CHR_IOCTL_PP_EPP_WRITE_ADDR  10
  41#define CHR_IOCTL_PP_EPP_WRITE       11
  42#define CHR_IOCTL_PP_DATA_DIR        12
  43
  44struct ParallelIOArg {
  45    void *buffer;
  46    int count;
  47};
  48
  49#define CHR_IOCTL_SERIAL_SET_TIOCM   13
  50#define CHR_IOCTL_SERIAL_GET_TIOCM   14
  51
  52#define CHR_TIOCM_CTS   0x020
  53#define CHR_TIOCM_CAR   0x040
  54#define CHR_TIOCM_DSR   0x100
  55#define CHR_TIOCM_RI    0x080
  56#define CHR_TIOCM_DTR   0x002
  57#define CHR_TIOCM_RTS   0x004
  58
  59typedef void IOEventHandler(void *opaque, int event);
  60
  61struct CharDriverState {
  62    QemuMutex chr_write_lock;
  63    void (*init)(struct CharDriverState *s);
  64    int (*chr_write)(struct CharDriverState *s, const uint8_t *buf, int len);
  65    int (*chr_sync_read)(struct CharDriverState *s,
  66                         const uint8_t *buf, int len);
  67    GSource *(*chr_add_watch)(struct CharDriverState *s, GIOCondition cond);
  68    void (*chr_update_read_handler)(struct CharDriverState *s);
  69    int (*chr_ioctl)(struct CharDriverState *s, int cmd, void *arg);
  70    int (*get_msgfds)(struct CharDriverState *s, int* fds, int num);
  71    int (*set_msgfds)(struct CharDriverState *s, int *fds, int num);
  72    int (*chr_add_client)(struct CharDriverState *chr, int fd);
  73    IOEventHandler *chr_event;
  74    IOCanReadHandler *chr_can_read;
  75    IOReadHandler *chr_read;
  76    void *handler_opaque;
  77    void (*chr_close)(struct CharDriverState *chr);
  78    void (*chr_accept_input)(struct CharDriverState *chr);
  79    void (*chr_set_echo)(struct CharDriverState *chr, bool echo);
  80    void (*chr_set_fe_open)(struct CharDriverState *chr, int fe_open);
  81    void (*chr_fe_event)(struct CharDriverState *chr, int event);
  82    void *opaque;
  83    char *label;
  84    char *filename;
  85    int logfd;
  86    int be_open;
  87    int fe_open;
  88    int explicit_fe_open;
  89    int explicit_be_open;
  90    int avail_connections;
  91    int is_mux;
  92    guint fd_in_tag;
  93    QemuOpts *opts;
  94    bool replay;
  95    QTAILQ_ENTRY(CharDriverState) next;
  96};
  97
  98/**
  99 * qemu_chr_alloc:
 100 * @backend: the common backend config
 101 * @errp: pointer to a NULL-initialized error object
 102 *
 103 * Allocate and initialize a new CharDriverState.
 104 *
 105 * Returns: a newly allocated CharDriverState, or NULL on error.
 106 */
 107CharDriverState *qemu_chr_alloc(ChardevCommon *backend, Error **errp);
 108
 109/**
 110 * @qemu_chr_new_from_opts:
 111 *
 112 * Create a new character backend from a QemuOpts list.
 113 *
 114 * @opts see qemu-config.c for a list of valid options
 115 * @init not sure..
 116 *
 117 * Returns: a new character backend
 118 */
 119CharDriverState *qemu_chr_new_from_opts(QemuOpts *opts,
 120                                    void (*init)(struct CharDriverState *s),
 121                                    Error **errp);
 122
 123/**
 124 * @qemu_chr_parse_common:
 125 *
 126 * Parse the common options available to all character backends.
 127 *
 128 * @opts the options that still need parsing
 129 * @backend a new backend
 130 */
 131void qemu_chr_parse_common(QemuOpts *opts, ChardevCommon *backend);
 132
 133/**
 134 * @qemu_chr_new:
 135 *
 136 * Create a new character backend from a URI.
 137 *
 138 * @label the name of the backend
 139 * @filename the URI
 140 * @init not sure..
 141 *
 142 * Returns: a new character backend
 143 */
 144CharDriverState *qemu_chr_new(const char *label, const char *filename,
 145                              void (*init)(struct CharDriverState *s));
 146
 147/**
 148 * @qemu_chr_new_noreplay:
 149 *
 150 * Create a new character backend from a URI.
 151 * Character device communications are not written
 152 * into the replay log.
 153 *
 154 * @label the name of the backend
 155 * @filename the URI
 156 * @init not sure..
 157 *
 158 * Returns: a new character backend
 159 */
 160CharDriverState *qemu_chr_new_noreplay(const char *label, const char *filename,
 161                                       void (*init)(struct CharDriverState *s));
 162
 163/**
 164 * @qemu_chr_delete:
 165 *
 166 * Destroy a character backend and remove it from the list of
 167 * identified character backends.
 168 */
 169void qemu_chr_delete(CharDriverState *chr);
 170
 171/**
 172 * @qemu_chr_free:
 173 *
 174 * Destroy a character backend.
 175 */
 176void qemu_chr_free(CharDriverState *chr);
 177
 178/**
 179 * @qemu_chr_fe_set_echo:
 180 *
 181 * Ask the backend to override its normal echo setting.  This only really
 182 * applies to the stdio backend and is used by the QMP server such that you
 183 * can see what you type if you try to type QMP commands.
 184 *
 185 * @echo true to enable echo, false to disable echo
 186 */
 187void qemu_chr_fe_set_echo(struct CharDriverState *chr, bool echo);
 188
 189/**
 190 * @qemu_chr_fe_set_open:
 191 *
 192 * Set character frontend open status.  This is an indication that the
 193 * front end is ready (or not) to begin doing I/O.
 194 */
 195void qemu_chr_fe_set_open(struct CharDriverState *chr, int fe_open);
 196
 197/**
 198 * @qemu_chr_fe_event:
 199 *
 200 * Send an event from the front end to the back end.
 201 *
 202 * @event the event to send
 203 */
 204void qemu_chr_fe_event(CharDriverState *s, int event);
 205
 206/**
 207 * @qemu_chr_fe_printf:
 208 *
 209 * Write to a character backend using a printf style interface.
 210 * This function is thread-safe.
 211 *
 212 * @fmt see #printf
 213 */
 214void qemu_chr_fe_printf(CharDriverState *s, const char *fmt, ...)
 215    GCC_FMT_ATTR(2, 3);
 216
 217int qemu_chr_fe_add_watch(CharDriverState *s, GIOCondition cond,
 218                          GIOFunc func, void *user_data);
 219
 220/**
 221 * @qemu_chr_fe_write:
 222 *
 223 * Write data to a character backend from the front end.  This function
 224 * will send data from the front end to the back end.  This function
 225 * is thread-safe.
 226 *
 227 * @buf the data
 228 * @len the number of bytes to send
 229 *
 230 * Returns: the number of bytes consumed
 231 */
 232int qemu_chr_fe_write(CharDriverState *s, const uint8_t *buf, int len);
 233
 234/**
 235 * @qemu_chr_fe_write_all:
 236 *
 237 * Write data to a character backend from the front end.  This function will
 238 * send data from the front end to the back end.  Unlike @qemu_chr_fe_write,
 239 * this function will block if the back end cannot consume all of the data
 240 * attempted to be written.  This function is thread-safe.
 241 *
 242 * @buf the data
 243 * @len the number of bytes to send
 244 *
 245 * Returns: the number of bytes consumed
 246 */
 247int qemu_chr_fe_write_all(CharDriverState *s, const uint8_t *buf, int len);
 248
 249/**
 250 * @qemu_chr_fe_read_all:
 251 *
 252 * Read data to a buffer from the back end.
 253 *
 254 * @buf the data buffer
 255 * @len the number of bytes to read
 256 *
 257 * Returns: the number of bytes read
 258 */
 259int qemu_chr_fe_read_all(CharDriverState *s, uint8_t *buf, int len);
 260
 261/**
 262 * @qemu_chr_fe_ioctl:
 263 *
 264 * Issue a device specific ioctl to a backend.  This function is thread-safe.
 265 *
 266 * @cmd see CHR_IOCTL_*
 267 * @arg the data associated with @cmd
 268 *
 269 * Returns: if @cmd is not supported by the backend, -ENOTSUP, otherwise the
 270 *          return value depends on the semantics of @cmd
 271 */
 272int qemu_chr_fe_ioctl(CharDriverState *s, int cmd, void *arg);
 273
 274/**
 275 * @qemu_chr_fe_get_msgfd:
 276 *
 277 * For backends capable of fd passing, return the latest file descriptor passed
 278 * by a client.
 279 *
 280 * Returns: -1 if fd passing isn't supported or there is no pending file
 281 *          descriptor.  If a file descriptor is returned, subsequent calls to
 282 *          this function will return -1 until a client sends a new file
 283 *          descriptor.
 284 */
 285int qemu_chr_fe_get_msgfd(CharDriverState *s);
 286
 287/**
 288 * @qemu_chr_fe_get_msgfds:
 289 *
 290 * For backends capable of fd passing, return the number of file received
 291 * descriptors and fills the fds array up to num elements
 292 *
 293 * Returns: -1 if fd passing isn't supported or there are no pending file
 294 *          descriptors.  If file descriptors are returned, subsequent calls to
 295 *          this function will return -1 until a client sends a new set of file
 296 *          descriptors.
 297 */
 298int qemu_chr_fe_get_msgfds(CharDriverState *s, int *fds, int num);
 299
 300/**
 301 * @qemu_chr_fe_set_msgfds:
 302 *
 303 * For backends capable of fd passing, set an array of fds to be passed with
 304 * the next send operation.
 305 * A subsequent call to this function before calling a write function will
 306 * result in overwriting the fd array with the new value without being send.
 307 * Upon writing the message the fd array is freed.
 308 *
 309 * Returns: -1 if fd passing isn't supported.
 310 */
 311int qemu_chr_fe_set_msgfds(CharDriverState *s, int *fds, int num);
 312
 313/**
 314 * @qemu_chr_fe_claim:
 315 *
 316 * Claim a backend before using it, should be called before calling
 317 * qemu_chr_add_handlers(). 
 318 *
 319 * Returns: -1 if the backend is already in use by another frontend, 0 on
 320 *          success.
 321 */
 322int qemu_chr_fe_claim(CharDriverState *s);
 323
 324/**
 325 * @qemu_chr_fe_claim_no_fail:
 326 *
 327 * Like qemu_chr_fe_claim, but will exit qemu with an error when the
 328 * backend is already in use.
 329 */
 330void qemu_chr_fe_claim_no_fail(CharDriverState *s);
 331
 332/**
 333 * @qemu_chr_fe_claim:
 334 *
 335 * Release a backend for use by another frontend.
 336 *
 337 * Returns: -1 if the backend is already in use by another frontend, 0 on
 338 *          success.
 339 */
 340void qemu_chr_fe_release(CharDriverState *s);
 341
 342/**
 343 * @qemu_chr_be_can_write:
 344 *
 345 * Determine how much data the front end can currently accept.  This function
 346 * returns the number of bytes the front end can accept.  If it returns 0, the
 347 * front end cannot receive data at the moment.  The function must be polled
 348 * to determine when data can be received.
 349 *
 350 * Returns: the number of bytes the front end can receive via @qemu_chr_be_write
 351 */
 352int qemu_chr_be_can_write(CharDriverState *s);
 353
 354/**
 355 * @qemu_chr_be_write:
 356 *
 357 * Write data from the back end to the front end.  Before issuing this call,
 358 * the caller should call @qemu_chr_be_can_write to determine how much data
 359 * the front end can currently accept.
 360 *
 361 * @buf a buffer to receive data from the front end
 362 * @len the number of bytes to receive from the front end
 363 */
 364void qemu_chr_be_write(CharDriverState *s, uint8_t *buf, int len);
 365
 366/**
 367 * @qemu_chr_be_write_impl:
 368 *
 369 * Implementation of back end writing. Used by replay module.
 370 *
 371 * @buf a buffer to receive data from the front end
 372 * @len the number of bytes to receive from the front end
 373 */
 374void qemu_chr_be_write_impl(CharDriverState *s, uint8_t *buf, int len);
 375
 376/**
 377 * @qemu_chr_be_event:
 378 *
 379 * Send an event from the back end to the front end.
 380 *
 381 * @event the event to send
 382 */
 383void qemu_chr_be_event(CharDriverState *s, int event);
 384
 385void qemu_chr_add_handlers(CharDriverState *s,
 386                           IOCanReadHandler *fd_can_read,
 387                           IOReadHandler *fd_read,
 388                           IOEventHandler *fd_event,
 389                           void *opaque);
 390
 391void qemu_chr_be_generic_open(CharDriverState *s);
 392void qemu_chr_accept_input(CharDriverState *s);
 393int qemu_chr_add_client(CharDriverState *s, int fd);
 394CharDriverState *qemu_chr_find(const char *name);
 395bool chr_is_ringbuf(const CharDriverState *chr);
 396
 397QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename);
 398
 399void register_char_driver(const char *name, ChardevBackendKind kind,
 400        void (*parse)(QemuOpts *opts, ChardevBackend *backend, Error **errp),
 401        CharDriverState *(*create)(const char *id, ChardevBackend *backend,
 402                                   ChardevReturn *ret, Error **errp));
 403
 404extern int term_escape_char;
 405
 406CharDriverState *qemu_char_get_next_serial(void);
 407
 408/* console.c */
 409typedef CharDriverState *(VcHandler)(ChardevVC *vc, Error **errp);
 410void register_vc_handler(VcHandler *handler);
 411
 412#endif
 413