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