Home | History | Annotate | Download | only in qemu
      1 #ifndef QEMU_CHAR_H
      2 #define QEMU_CHAR_H
      3 
      4 #include "qemu-common.h"
      5 #include "qemu-queue.h"
      6 
      7 /* character device */
      8 
      9 #define CHR_EVENT_BREAK   0 /* serial break char */
     10 #define CHR_EVENT_FOCUS   1 /* focus to this terminal (modal input needed) */
     11 #define CHR_EVENT_OPENED  2 /* new connection established */
     12 #define CHR_EVENT_MUX_IN  3 /* mux-focus was set to this terminal */
     13 #define CHR_EVENT_MUX_OUT 4 /* mux-focus will move on */
     14 #define CHR_EVENT_CLOSED  5 /* connection closed */
     15 
     16 
     17 #define CHR_IOCTL_SERIAL_SET_PARAMS   1
     18 typedef struct {
     19     int speed;
     20     int parity;
     21     int data_bits;
     22     int stop_bits;
     23 } QEMUSerialSetParams;
     24 
     25 #define CHR_IOCTL_SERIAL_SET_BREAK    2
     26 
     27 #define CHR_IOCTL_PP_READ_DATA        3
     28 #define CHR_IOCTL_PP_WRITE_DATA       4
     29 #define CHR_IOCTL_PP_READ_CONTROL     5
     30 #define CHR_IOCTL_PP_WRITE_CONTROL    6
     31 #define CHR_IOCTL_PP_READ_STATUS      7
     32 #define CHR_IOCTL_PP_EPP_READ_ADDR    8
     33 #define CHR_IOCTL_PP_EPP_READ         9
     34 #define CHR_IOCTL_PP_EPP_WRITE_ADDR  10
     35 #define CHR_IOCTL_PP_EPP_WRITE       11
     36 #define CHR_IOCTL_PP_DATA_DIR        12
     37 
     38 #define CHR_IOCTL_SERIAL_SET_TIOCM   13
     39 #define CHR_IOCTL_SERIAL_GET_TIOCM   14
     40 
     41 #define CHR_TIOCM_CTS	0x020
     42 #define CHR_TIOCM_CAR	0x040
     43 #define CHR_TIOCM_DSR	0x100
     44 #define CHR_TIOCM_RI	0x080
     45 #define CHR_TIOCM_DTR	0x002
     46 #define CHR_TIOCM_RTS	0x004
     47 
     48 typedef void IOEventHandler(void *opaque, int event);
     49 
     50 struct CharDriverState {
     51     void (*init)(struct CharDriverState *s);
     52     int (*chr_write)(struct CharDriverState *s, const uint8_t *buf, int len);
     53     void (*chr_update_read_handler)(struct CharDriverState *s);
     54     int (*chr_ioctl)(struct CharDriverState *s, int cmd, void *arg);
     55     IOEventHandler *chr_event;
     56     IOCanRWHandler *chr_can_read;
     57     IOReadHandler *chr_read;
     58     void *handler_opaque;
     59     void (*chr_send_event)(struct CharDriverState *chr, int event);
     60     void (*chr_close)(struct CharDriverState *chr);
     61     void (*chr_accept_input)(struct CharDriverState *chr);
     62     void *opaque;
     63     int focus;
     64     QEMUBH *bh;
     65     char *label;
     66     char *filename;
     67     QTAILQ_ENTRY(CharDriverState) next;
     68 };
     69 
     70 CharDriverState *qemu_chr_open(const char *label, const char *filename, void (*init)(struct CharDriverState *s));
     71 void qemu_chr_close(CharDriverState *chr);
     72 void qemu_chr_printf(CharDriverState *s, const char *fmt, ...);
     73 int qemu_chr_write(CharDriverState *s, const uint8_t *buf, int len);
     74 void qemu_chr_send_event(CharDriverState *s, int event);
     75 void qemu_chr_add_handlers(CharDriverState *s,
     76                            IOCanRWHandler *fd_can_read,
     77                            IOReadHandler *fd_read,
     78                            IOEventHandler *fd_event,
     79                            void *opaque);
     80 int qemu_chr_ioctl(CharDriverState *s, int cmd, void *arg);
     81 void qemu_chr_reset(CharDriverState *s);
     82 void qemu_chr_initial_reset(void);
     83 int qemu_chr_can_read(CharDriverState *s);
     84 void qemu_chr_read(CharDriverState *s, uint8_t *buf, int len);
     85 void qemu_chr_accept_input(CharDriverState *s);
     86 void qemu_chr_info(Monitor *mon);
     87 
     88 extern int term_escape_char;
     89 
     90 /* async I/O support */
     91 
     92 int qemu_set_fd_handler2(int fd,
     93                          IOCanRWHandler *fd_read_poll,
     94                          IOHandler *fd_read,
     95                          IOHandler *fd_write,
     96                          void *opaque);
     97 int qemu_set_fd_handler(int fd,
     98                         IOHandler *fd_read,
     99                         IOHandler *fd_write,
    100                         void *opaque);
    101 
    102 #endif
    103