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