18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef QEMU_CHAR_H 28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define QEMU_CHAR_H 38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "qemu-common.h" 5031d655004e505a15e92580a16a181d1d247c4d5David 'Digit' Turner#include "qemu/queue.h" 693e0d9cfb6d950b638ba93cf5318e5689e4ba64eDavid 'Digit' Turner#include "qemu/option.h" 71c31e3e43ce4cca85a707dfff631e5e102fdecedDavid 'Digit' Turner#include "qemu/config-file.h" 81c31e3e43ce4cca85a707dfff631e5e102fdecedDavid 'Digit' Turner#include "qapi/qmp/qobject.h" 91c31e3e43ce4cca85a707dfff631e5e102fdecedDavid 'Digit' Turner#include "qapi/qmp/qstring.h" 108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* character device */ 128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define CHR_EVENT_BREAK 0 /* serial break char */ 145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define CHR_EVENT_FOCUS 1 /* focus to this terminal (modal input needed) */ 15a5d412078b8e7478d81df03710eacc7a21096ba2David 'Digit' Turner#define CHR_EVENT_OPENED 2 /* new connection established */ 165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define CHR_EVENT_MUX_IN 3 /* mux-focus was set to this terminal */ 175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define CHR_EVENT_MUX_OUT 4 /* mux-focus will move on */ 18a5d412078b8e7478d81df03710eacc7a21096ba2David 'Digit' Turner#define CHR_EVENT_CLOSED 5 /* connection closed */ 198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CHR_IOCTL_SERIAL_SET_PARAMS 1 228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct { 238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int speed; 248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int parity; 258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int data_bits; 268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int stop_bits; 278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} QEMUSerialSetParams; 288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CHR_IOCTL_SERIAL_SET_BREAK 2 308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CHR_IOCTL_PP_READ_DATA 3 328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CHR_IOCTL_PP_WRITE_DATA 4 338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CHR_IOCTL_PP_READ_CONTROL 5 348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CHR_IOCTL_PP_WRITE_CONTROL 6 358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CHR_IOCTL_PP_READ_STATUS 7 368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CHR_IOCTL_PP_EPP_READ_ADDR 8 378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CHR_IOCTL_PP_EPP_READ 9 388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CHR_IOCTL_PP_EPP_WRITE_ADDR 10 398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CHR_IOCTL_PP_EPP_WRITE 11 408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CHR_IOCTL_PP_DATA_DIR 12 418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CHR_IOCTL_SERIAL_SET_TIOCM 13 438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CHR_IOCTL_SERIAL_GET_TIOCM 14 448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CHR_TIOCM_CTS 0x020 468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CHR_TIOCM_CAR 0x040 478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CHR_TIOCM_DSR 0x100 488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CHR_TIOCM_RI 0x080 498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CHR_TIOCM_DTR 0x002 508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CHR_TIOCM_RTS 0x004 518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef void IOEventHandler(void *opaque, int event); 538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstruct CharDriverState { 555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner void (*init)(struct CharDriverState *s); 568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int (*chr_write)(struct CharDriverState *s, const uint8_t *buf, int len); 578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project void (*chr_update_read_handler)(struct CharDriverState *s); 588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int (*chr_ioctl)(struct CharDriverState *s, int cmd, void *arg); 59622311e8dfe485ba588b570c69d66e71d9624104David Turner int (*get_msgfd)(struct CharDriverState *s); 608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project IOEventHandler *chr_event; 614143d8f4c302878923bde0cb2420f4ca27245bcdDavid Turner IOCanReadHandler *chr_can_read; 628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project IOReadHandler *chr_read; 638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project void *handler_opaque; 648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project void (*chr_send_event)(struct CharDriverState *chr, int event); 658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project void (*chr_close)(struct CharDriverState *chr); 668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project void (*chr_accept_input)(struct CharDriverState *chr); 6717410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner void (*chr_set_echo)(struct CharDriverState *chr, bool echo); 6817410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner void (*chr_guest_open)(struct CharDriverState *chr); 6917410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner void (*chr_guest_close)(struct CharDriverState *chr); 708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project void *opaque; 718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project QEMUBH *bh; 725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner char *label; 735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner char *filename; 74622311e8dfe485ba588b570c69d66e71d9624104David Turner int opened; 7517410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner int avail_connections; 76a5d412078b8e7478d81df03710eacc7a21096ba2David 'Digit' Turner QTAILQ_ENTRY(CharDriverState) next; 778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}; 788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 79622311e8dfe485ba588b570c69d66e71d9624104David TurnerQemuOpts *qemu_chr_parse_compat(const char *label, const char *filename); 80622311e8dfe485ba588b570c69d66e71d9624104David TurnerCharDriverState *qemu_chr_open_opts(QemuOpts *opts, 81622311e8dfe485ba588b570c69d66e71d9624104David Turner void (*init)(struct CharDriverState *s)); 825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' TurnerCharDriverState *qemu_chr_open(const char *label, const char *filename, void (*init)(struct CharDriverState *s)); 8317410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turnervoid qemu_chr_set_echo(struct CharDriverState *chr, bool echo); 8417410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turnervoid qemu_chr_guest_open(struct CharDriverState *chr); 8517410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turnervoid qemu_chr_guest_close(struct CharDriverState *chr); 868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid qemu_chr_close(CharDriverState *chr); 8717410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turnervoid qemu_chr_printf(CharDriverState *s, const char *fmt, ...) 8817410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner GCC_FMT_ATTR(2, 3); 898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint qemu_chr_write(CharDriverState *s, const uint8_t *buf, int len); 908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid qemu_chr_send_event(CharDriverState *s, int event); 918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid qemu_chr_add_handlers(CharDriverState *s, 924143d8f4c302878923bde0cb2420f4ca27245bcdDavid Turner IOCanReadHandler *fd_can_read, 938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project IOReadHandler *fd_read, 948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project IOEventHandler *fd_event, 958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project void *opaque); 968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint qemu_chr_ioctl(CharDriverState *s, int cmd, void *arg); 975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid qemu_chr_initial_reset(void); 98622311e8dfe485ba588b570c69d66e71d9624104David Turnervoid qemu_chr_generic_open(CharDriverState *s); 998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint qemu_chr_can_read(CharDriverState *s); 1008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid qemu_chr_read(CharDriverState *s, uint8_t *buf, int len); 101622311e8dfe485ba588b570c69d66e71d9624104David Turnerint qemu_chr_get_msgfd(CharDriverState *s); 1028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid qemu_chr_accept_input(CharDriverState *s); 103622311e8dfe485ba588b570c69d66e71d9624104David Turnervoid qemu_chr_info_print(Monitor *mon, const QObject *ret_data); 1043b2846ad9f156e62574a0abc5ec489f8f13f1121David 'Digit' Turnervoid qemu_chr_info(Monitor *mon, QObject **ret_data); 105622311e8dfe485ba588b570c69d66e71d9624104David TurnerCharDriverState *qemu_chr_find(const char *name); 106622311e8dfe485ba588b570c69d66e71d9624104David Turner 107622311e8dfe485ba588b570c69d66e71d9624104David Turner/* add an eventfd to the qemu devices that are polled */ 108622311e8dfe485ba588b570c69d66e71d9624104David TurnerCharDriverState *qemu_chr_open_eventfd(int eventfd); 1095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerextern int term_escape_char; 1118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 11217410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner/* memory chardev */ 11317410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turnervoid qemu_chr_init_mem(CharDriverState *chr); 11417410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turnervoid qemu_chr_close_mem(CharDriverState *chr); 11517410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' TurnerQString *qemu_chr_mem_to_qs(CharDriverState *chr); 11617410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turnersize_t qemu_chr_mem_osize(const CharDriverState *chr); 11717410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner 1188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* async I/O support */ 1198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint qemu_set_fd_handler2(int fd, 1214143d8f4c302878923bde0cb2420f4ca27245bcdDavid Turner IOCanReadHandler *fd_read_poll, 1228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project IOHandler *fd_read, 1238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project IOHandler *fd_write, 1248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project void *opaque); 1258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint qemu_set_fd_handler(int fd, 1268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project IOHandler *fd_read, 1278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project IOHandler *fd_write, 1288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project void *opaque); 1298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 130