[PATCH v3 48/49] monitor: move HMP-specific to monitor-hmp-internal.h
Marc-André Lureau <[email protected]>
| Newsgroups | org.nongnu.qemu-devel |
|---|---|
| Message-ID | <[email protected]> |
Move HMP-specific declarations to its own CONFIG_HMP guarded header. Signed-off-by: Marc-André Lureau <[email protected]> --- include/monitor/hmp.h | 8 +++- migration/migration-hmp-cmds.c | 1 + monitor/hmp-cmds.c | 1 + monitor/hmp.c | 1 + monitor/monitor-hmp-internal.h | 106 +++++++++++++++++++++++++++++++++++++++++ monitor/monitor-internal.h | 99 -------------------------------------- monitor/monitor.c | 1 + monitor/qmp-cmds.c | 1 + stubs/monitor-core.c | 2 + stubs/monitor-internal.c | 2 + tests/unit/test-util-sockets.c | 2 - tools/qemu-vnc/stubs.c | 6 --- 12 files changed, 121 insertions(+), 109 deletions(-) diff --git a/include/monitor/hmp.h b/include/monitor/hmp.h index f10bf83df86d..ef53e87f7608 100644 --- a/include/monitor/hmp.h +++ b/include/monitor/hmp.h @@ -21,6 +21,10 @@ #define TYPE_MONITOR_HMP "monitor-hmp" OBJECT_DECLARE_TYPE(MonitorHMP, MonitorHMPClass, MONITOR_HMP); +MonitorHMP *monitor_cur_hmp(void); + +#ifdef CONFIG_HMP + #define HMP_STUB(cmd) \ void hmp_##cmd(MonitorHMP *hmp, const QDict *qdict) \ { \ @@ -36,8 +40,6 @@ struct MonitorDef { void monitor_new_hmp(const char *id, const char *chardev_id, bool use_readline, Error **errp); -MonitorHMP *monitor_cur_hmp(void); - int monitor_hmp_vprintf(MonitorHMP *mon, const char *fmt, va_list ap) G_GNUC_PRINTF(2, 0); int monitor_hmp_printf(MonitorHMP *mon, const char *fmt, ...) G_GNUC_PRINTF(2, 3); @@ -218,4 +220,6 @@ void hmp_info_skeys(MonitorHMP *hmp, const QDict *qdict); void hmp_info_cmma(MonitorHMP *hmp, const QDict *qdict); void hmp_migrationmode(MonitorHMP *hmp, const QDict *qdict); +#endif /* CONFIG_HMP */ + #endif diff --git a/migration/migration-hmp-cmds.c b/migration/migration-hmp-cmds.c index 6fe189471899..27b38d0e5f85 100644 --- a/migration/migration-hmp-cmds.c +++ b/migration/migration-hmp-cmds.c @@ -21,6 +21,7 @@ #include "monitor/hmp-completion.h" #include "monitor/monitor.h" #include "monitor/monitor-internal.h" +#include "monitor/monitor-hmp-internal.h" #include "qapi/error.h" #include "qapi/qapi-commands-migration.h" #include "qapi/qapi-visit-migration.h" diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c index 3ac70c3f1123..91701ddf331b 100644 --- a/monitor/hmp-cmds.c +++ b/monitor/hmp-cmds.c @@ -25,6 +25,7 @@ #include "monitor/hmp.h" #include "monitor/hmp-completion.h" #include "monitor/monitor-internal.h" +#include "monitor/monitor-hmp-internal.h" #include "monitor/qdev.h" #include "qapi/error.h" #include "qapi/qapi-commands-control.h" diff --git a/monitor/hmp.c b/monitor/hmp.c index e3fc05f521a8..488ec23937df 100644 --- a/monitor/hmp.c +++ b/monitor/hmp.c @@ -27,6 +27,7 @@ #include "hw/core/qdev.h" #include "hw/core/sysemu-cpu-ops.h" #include "monitor-internal.h" +#include "monitor-hmp-internal.h" #include "monitor/hmp.h" #include "qobject/qdict.h" #include "qobject/qnum.h" diff --git a/monitor/monitor-hmp-internal.h b/monitor/monitor-hmp-internal.h new file mode 100644 index 000000000000..4e2430551abf --- /dev/null +++ b/monitor/monitor-hmp-internal.h @@ -0,0 +1,106 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#ifndef MONITOR_HMP_INTERNAL_H +#define MONITOR_HMP_INTERNAL_H + +#ifdef CONFIG_HMP +#include "monitor/hmp.h" +/* + * Supported types: + * + * 'F' filename + * 'B' block device name + * 's' string (accept optional quote) + * 'S' it just appends the rest of the string (accept optional quote) + * 'O' option string of the form NAME=VALUE,... + * parsed according to QemuOptsList given by its name + * Example: 'device:O' uses qemu_device_opts. + * Restriction: only lists with empty desc are supported + * TODO lift the restriction + * 'i' 32 bit integer + * 'l' target long (32 or 64 bit) + * 'M' Non-negative target long (32 or 64 bit), in user mode the + * value is multiplied by 2^20 (think Mebibyte) + * 'o' octets (aka bytes) + * user mode accepts an optional E, e, P, p, T, t, G, g, M, m, + * K, k suffix, which multiplies the value by 2^60 for suffixes E + * and e, 2^50 for suffixes P and p, 2^40 for suffixes T and t, + * 2^30 for suffixes G and g, 2^20 for M and m, 2^10 for K and k + * 'T' double + * user mode accepts an optional ms, us, ns suffix, + * which divides the value by 1e3, 1e6, 1e9, respectively + * '/' optional gdb-like print format (like "/10x") + * + * '?' optional type (for all types, except '/') + * '.' other form of optional type (for 'i' and 'l') + * 'b' boolean + * user mode accepts "on" or "off" + * '-' optional parameter (eg. '-f'); if followed by a 's', it + * specifies an optional string param (e.g. '-fs' allows '-f foo') + * + */ + +typedef struct HMPCommand { + const char *name; + const char *args_type; + const char *params; + const char *help; + const char *flags; /* p=preconfig */ + void (*cmd)(MonitorHMP *hmp, const QDict *qdict); + /* + * If implementing a command that takes no arguments and simply + * prints formatted data, then leave @cmd NULL, and then set + * @cmd_info_hrt to the corresponding QMP handler that returns + * the formatted text. + */ + HumanReadableText *(*cmd_info_hrt)(Error **errp); + /* + * @sub_table is a list of 2nd level of commands. If it does not exist, + * cmd should be used. If it exists, sub_table[?].cmd should be + * used, and cmd of 1st level plays the role of help function. + */ + struct HMPCommand *sub_table; + void (*command_completion)(ReadLineState *rs, int nb_args, const char *str); + + /* Keep non-pointer data at the end to minimize holes. */ + + /** + * @arch_bitmask: bitmask of QEMU_ARCH_* constants + * Allow to restrict the command for a particular set of + * target architectures. + */ + uint32_t arch_bitmask; + bool coroutine; +} HMPCommand; + +struct MonitorHMPClass { + MonitorClass parent_class; +}; + +struct MonitorHMP { + Monitor parent_obj; + bool use_readline; + /* + * State used only in the thread "owning" the monitor. + * This is currently always the main thread, since + * HMP does not allow use of the I/O thread at this time. + * These members can be safely accessed without locks. + */ + ReadLineState *rs; + char *mon_cpu_path; + int reset_seen; +}; + +int monitor_hmp_set_cpu(MonitorHMP *hmp, int cpu_index); +void handle_hmp_command(MonitorHMP *hmp, const char *cmdline); +int hmp_compare_cmd(const char *name, const char *list); + +/* + * hmp_cmds_for_target: Return array of HMPCommand entries + * + * If @info_command is true, return the particular 'info foo' commands array. + */ +HMPCommand *hmp_cmds_for_target(bool info_command); + +#endif /* CONFIG_HMP */ +#endif diff --git a/monitor/monitor-internal.h b/monitor/monitor-internal.h index c198c12eaa00..822a66d06d00 100644 --- a/monitor/monitor-internal.h +++ b/monitor/monitor-internal.h @@ -27,7 +27,6 @@ #include "chardev/char-fe.h" #include "monitor/monitor.h" -#include "monitor/hmp.h" #include "qapi/qapi-emit-events.h" #include "qapi/qapi-types-control.h" #include "qapi/qapi-types-qom.h" @@ -36,75 +35,6 @@ #include "qemu/readline.h" #include "system/iothread.h" -/* - * Supported types: - * - * 'F' filename - * 'B' block device name - * 's' string (accept optional quote) - * 'S' it just appends the rest of the string (accept optional quote) - * 'O' option string of the form NAME=VALUE,... - * parsed according to QemuOptsList given by its name - * Example: 'device:O' uses qemu_device_opts. - * Restriction: only lists with empty desc are supported - * TODO lift the restriction - * 'i' 32 bit integer - * 'l' target long (32 or 64 bit) - * 'M' Non-negative target long (32 or 64 bit), in user mode the - * value is multiplied by 2^20 (think Mebibyte) - * 'o' octets (aka bytes) - * user mode accepts an optional E, e, P, p, T, t, G, g, M, m, - * K, k suffix, which multiplies the value by 2^60 for suffixes E - * and e, 2^50 for suffixes P and p, 2^40 for suffixes T and t, - * 2^30 for suffixes G and g, 2^20 for M and m, 2^10 for K and k - * 'T' double - * user mode accepts an optional ms, us, ns suffix, - * which divides the value by 1e3, 1e6, 1e9, respectively - * '/' optional gdb-like print format (like "/10x") - * - * '?' optional type (for all types, except '/') - * '.' other form of optional type (for 'i' and 'l') - * 'b' boolean - * user mode accepts "on" or "off" - * '-' optional parameter (eg. '-f'); if followed by a 's', it - * specifies an optional string param (e.g. '-fs' allows '-f foo') - * - */ - -typedef struct HMPCommand { - const char *name; - const char *args_type; - const char *params; - const char *help; - const char *flags; /* p=preconfig */ - void (*cmd)(MonitorHMP *mon, const QDict *qdict); - /* - * If implementing a command that takes no arguments and simply - * prints formatted data, then leave @cmd NULL, and then set - * @cmd_info_hrt to the corresponding QMP handler that returns - * the formatted text. - */ - HumanReadableText *(*cmd_info_hrt)(Error **errp); - /* - * @sub_table is a list of 2nd level of commands. If it does not exist, - * cmd should be used. If it exists, sub_table[?].cmd should be - * used, and cmd of 1st level plays the role of help function. - */ - struct HMPCommand *sub_table; - void (*command_completion)(ReadLineState *rs, int nb_args, const char *str); - - /* Keep non-pointer data at the end to minimize holes. */ - - /** - * @arch_bitmask: bitmask of QEMU_ARCH_* constants - * Allow to restrict the command for a particular set of - * target architectures. - */ - uint32_t arch_bitmask; - bool coroutine; -} HMPCommand; - - struct MonitorClass { ObjectClass parent_class; @@ -149,24 +79,6 @@ struct Monitor { int mux_out; }; -struct MonitorHMPClass { - MonitorClass parent_class; -}; - -struct MonitorHMP { - Monitor parent_obj; - bool use_readline; - /* - * State used only in the thread "owning" the monitor. - * This is currently always the main thread, since - * HMP does not allow use of the I/O thread at this time. - * These members can be safely accessed without locks. - */ - ReadLineState *rs; - char *mon_cpu_path; - int reset_seen; -}; - struct MonitorQMPClass { MonitorClass parent_class; }; @@ -209,21 +121,10 @@ int monitor_can_read(void *opaque); void monitor_cancel_out_watch(Monitor *mon); void monitor_list_append(Monitor *mon); void monitor_fdsets_cleanup(void); -int monitor_hmp_set_cpu(MonitorHMP *mon, int cpu_index); void qmp_send_response(MonitorQMP *mon, const QDict *rsp); void monitor_data_destroy_qmp(MonitorQMP *mon); void coroutine_fn monitor_qmp_dispatcher_co(void *data); void qmp_dispatcher_co_wake(void); -void handle_hmp_command(MonitorHMP *hmp, const char *cmdline); -int hmp_compare_cmd(const char *name, const char *list); - -/* - * hmp_cmds_for_target: Return array of HMPCommand entries - * - * If @info_command is true, return the particular 'info foo' commands array. - */ -HMPCommand *hmp_cmds_for_target(bool info_command); - #endif diff --git a/monitor/monitor.c b/monitor/monitor.c index 7979cd1cbcfd..6ba06280e023 100644 --- a/monitor/monitor.c +++ b/monitor/monitor.c @@ -24,6 +24,7 @@ #include "qemu/osdep.h" #include "monitor-internal.h" +#include "monitor-hmp-internal.h" #include "qapi/error.h" #include "qapi/opts-visitor.h" #include "qapi/qapi-emit-events.h" diff --git a/monitor/qmp-cmds.c b/monitor/qmp-cmds.c index c9f24febdc96..7525a88e0494 100644 --- a/monitor/qmp-cmds.c +++ b/monitor/qmp-cmds.c @@ -16,6 +16,7 @@ #include "qemu/osdep.h" #include "qemu/sockets.h" #include "monitor-internal.h" +#include "monitor-hmp-internal.h" #include "monitor/qdev.h" #include "monitor/qmp-helpers.h" #include "system/system.h" diff --git a/stubs/monitor-core.c b/stubs/monitor-core.c index 0e74d78d52e4..8dfd46d2a8a3 100644 --- a/stubs/monitor-core.c +++ b/stubs/monitor-core.c @@ -1,6 +1,7 @@ #include "qemu/osdep.h" #include "monitor/hmp.h" +#ifdef CONFIG_HMP int monitor_hmp_vprintf(MonitorHMP *mon, const char *fmt, va_list ap) { /* @@ -17,3 +18,4 @@ int monitor_hmp_vprintf(MonitorHMP *mon, const char *fmt, va_list ap) } return -1; } +#endif diff --git a/stubs/monitor-internal.c b/stubs/monitor-internal.c index 6f69f1f14ae4..4483ca25557f 100644 --- a/stubs/monitor-internal.c +++ b/stubs/monitor-internal.c @@ -8,8 +8,10 @@ int monitor_get_fd(Monitor *mon, const char *name, Error **errp) return -1; } +#ifdef CONFIG_HMP void monitor_new_hmp(const char *id, const char *chardev_id, bool use_readline, Error **errp) { g_assert_not_reached(); } +#endif diff --git a/tests/unit/test-util-sockets.c b/tests/unit/test-util-sockets.c index 530a3fee3c13..006f5e579c6b 100644 --- a/tests/unit/test-util-sockets.c +++ b/tests/unit/test-util-sockets.c @@ -24,7 +24,6 @@ #include "qapi/error.h" #include "socket-helpers.h" #include "monitor/monitor.h" -#include "monitor/hmp.h" static void test_fd_is_socket_bad(void) { @@ -75,7 +74,6 @@ int monitor_get_fd(Monitor *mon, const char *fdname, Error **errp) */ Monitor *monitor_cur(void) { return cur_mon; } Monitor *monitor_set_cur(Coroutine *co, Monitor *mon) { abort(); } -int monitor_hmp_vprintf(MonitorHMP *mon, const char *fmt, va_list ap) { abort(); } #ifndef _WIN32 static void test_socket_fd_pass_name_good(void) diff --git a/tools/qemu-vnc/stubs.c b/tools/qemu-vnc/stubs.c index 0aa50a901d37..1e4c14913b56 100644 --- a/tools/qemu-vnc/stubs.c +++ b/tools/qemu-vnc/stubs.c @@ -9,7 +9,6 @@ #include "system/runstate.h" #include "hw/core/qdev.h" #include "monitor/monitor.h" -#include "monitor/hmp.h" #include "migration/vmstate.h" bool runstate_is_running(void) @@ -42,11 +41,6 @@ Monitor *monitor_set_cur(Coroutine *co, Monitor *mon) return NULL; } -int monitor_hmp_vprintf(MonitorHMP *mon, const char *fmt, va_list ap) -{ - return -1; -} - /* * Link-time stubs for VMState symbols referenced by VNC code. * The standalone binary never performs migration, so these are -- 2.55.0.543.g5ebe2ebe4ea8