diff --git a/monitor.c b/monitor.c index 34c347c0fb17232ce6695605a26cae31137cee02..7fc311d720cdafc29ef54222adaff2b2d7888570 100644 --- a/monitor.c +++ b/monitor.c @@ -5175,6 +5175,7 @@ void monitor_init(CharDriverState *chr, int flags) /* Control mode requires special handlers */ qemu_chr_add_handlers(chr, monitor_can_read, monitor_control_read, monitor_control_event, mon); + qemu_chr_set_echo(chr, true); } else { qemu_chr_add_handlers(chr, monitor_can_read, monitor_read, monitor_event, mon); diff --git a/qemu-char.c b/qemu-char.c index b570d60a5866f3c650159745f5359bd20e631d5a..b95cfdc6f9aac919171d6113d6d78bbcc18d236a 100644 --- a/qemu-char.c +++ b/qemu-char.c @@ -2558,6 +2558,13 @@ CharDriverState *qemu_chr_open(const char *label, const char *filename, void (*i return chr; } +void qemu_chr_set_echo(struct CharDriverState *chr, bool echo) +{ + if (chr->chr_set_echo) { + chr->chr_set_echo(chr, echo); + } +} + void qemu_chr_close(CharDriverState *chr) { QTAILQ_REMOVE(&chardevs, chr, next); diff --git a/qemu-char.h b/qemu-char.h index e6ee6c4bc9ee831f905c8777a4af05823c5619f6..56d9954c527a712daf16615bac315fbaa06e2f6c 100644 --- a/qemu-char.h +++ b/qemu-char.h @@ -64,6 +64,7 @@ struct CharDriverState { void (*chr_send_event)(struct CharDriverState *chr, int event); void (*chr_close)(struct CharDriverState *chr); void (*chr_accept_input)(struct CharDriverState *chr); + void (*chr_set_echo)(struct CharDriverState *chr, bool echo); void *opaque; QEMUBH *bh; char *label; @@ -76,6 +77,7 @@ QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename); CharDriverState *qemu_chr_open_opts(QemuOpts *opts, void (*init)(struct CharDriverState *s)); CharDriverState *qemu_chr_open(const char *label, const char *filename, void (*init)(struct CharDriverState *s)); +void qemu_chr_set_echo(struct CharDriverState *chr, bool echo); void qemu_chr_close(CharDriverState *chr); void qemu_chr_printf(CharDriverState *s, const char *fmt, ...) GCC_FMT_ATTR(2, 3);