| 1 | /* |
| 2 | * Human Monitor Interface |
| 3 | * |
| 4 | * Copyright IBM, Corp. 2011 |
| 5 | * |
| 6 | * Authors: |
| 7 | * Anthony Liguori <aliguori@us.ibm.com> |
| 8 | * |
| 9 | * This work is licensed under the terms of the GNU GPL, version 2. See |
| 10 | * the COPYING file in the top-level directory. |
| 11 | * |
| 12 | */ |
| 13 | |
| 14 | #ifndef HMP_H |
| 15 | #define HMP_H |
| 16 | |
| 17 | #include "qemu/readline.h" |
| 18 | #include "qapi/qapi-types-common.h" |
| 19 | #include "monitor/monitor.h" |
| 20 | |
| 21 | #define TYPE_MONITOR_HMP "monitor-hmp" |
| 22 | OBJECT_DECLARE_TYPE(MonitorHMP, MonitorHMPClass, MONITOR_HMP); |
| 23 | |
| 24 | MonitorHMP *monitor_cur_hmp(void); |
| 25 | |
| 26 | #ifdef CONFIG_HMP |
| 27 | |
| 28 | #define HMP_STUB(cmd) \ |
| 29 | void hmp_##cmd(MonitorHMP *hmp, const QDict *qdict) \ |
| 30 | { \ |
| 31 | g_assert_not_reached(); \ |
| 32 | } |
| 33 | |
| 34 | struct MonitorDef { |
| 35 | const char *name; |
| 36 | int offset; |
| 37 | int64_t (*get_value)(MonitorHMP *hmp, const MonitorDef *md, int offset); |
| 38 | }; |
| 39 | |
| 40 | void monitor_new_hmp(const char *id, const char *chardev_id, |
| 41 | bool use_readline, Error **errp); |
| 42 | |
| 43 | int monitor_hmp_vprintf(MonitorHMP *mon, const char *fmt, va_list ap) |
| 44 | G_GNUC_PRINTF(2, 0); |
| 45 | int monitor_hmp_printf(MonitorHMP *mon, const char *fmt, ...) G_GNUC_PRINTF(2, 3); |
| 46 | void monitor_hmp_printc(MonitorHMP *mon, int ch); |
| 47 | |
| 48 | void monitor_hmp_read_command(MonitorHMP *hmp, int show_prompt); |
| 49 | int monitor_hmp_read_password(MonitorHMP *hmp, ReadLineFunc *readline_func, |
| 50 | void *opaque); |
| 51 | |
| 52 | void monitor_register_hmp(const char *name, bool info, |
| 53 | void (*cmd)(MonitorHMP *mon, const QDict *qdict)); |
| 54 | void monitor_register_hmp_info_hrt(const char *name, |
| 55 | HumanReadableText *(*handler)(Error **errp)); |
| 56 | |
| 57 | |
| 58 | CPUArchState *monitor_hmp_get_cpu_env(MonitorHMP *hmp); |
| 59 | CPUState *monitor_hmp_get_cpu(MonitorHMP *hmp); |
| 60 | int monitor_hmp_get_cpu_index(MonitorHMP *hmp); |
| 61 | |
| 62 | bool hmp_handle_error(MonitorHMP *hmp, Error *err); |
| 63 | void hmp_help_cmd(MonitorHMP *hmp, const char *name); |
| 64 | strList *hmp_split_at_comma(const char *str); |
| 65 | |
| 66 | void hmp_info_name(MonitorHMP *hmp, const QDict *qdict); |
| 67 | void hmp_info_version(MonitorHMP *hmp, const QDict *qdict); |
| 68 | void hmp_info_kvm(MonitorHMP *hmp, const QDict *qdict); |
| 69 | void hmp_info_accelerators(MonitorHMP *hmp, const QDict *qdict); |
| 70 | void hmp_info_status(MonitorHMP *hmp, const QDict *qdict); |
| 71 | void hmp_info_uuid(MonitorHMP *hmp, const QDict *qdict); |
| 72 | void hmp_info_chardev(MonitorHMP *hmp, const QDict *qdict); |
| 73 | void hmp_info_mice(MonitorHMP *hmp, const QDict *qdict); |
| 74 | void hmp_info_migrate(MonitorHMP *hmp, const QDict *qdict); |
| 75 | void hmp_info_migrate_capabilities(MonitorHMP *hmp, const QDict *qdict); |
| 76 | void hmp_info_migrate_parameters(MonitorHMP *hmp, const QDict *qdict); |
| 77 | void hmp_info_cpus(MonitorHMP *hmp, const QDict *qdict); |
| 78 | void hmp_info_vnc(MonitorHMP *hmp, const QDict *qdict); |
| 79 | void hmp_info_spice(MonitorHMP *hmp, const QDict *qdict); |
| 80 | void hmp_info_balloon(MonitorHMP *hmp, const QDict *qdict); |
| 81 | void hmp_info_pci(MonitorHMP *hmp, const QDict *qdict); |
| 82 | void hmp_info_tpm(MonitorHMP *hmp, const QDict *qdict); |
| 83 | void hmp_info_iothreads(MonitorHMP *hmp, const QDict *qdict); |
| 84 | void hmp_quit(MonitorHMP *hmp, const QDict *qdict); |
| 85 | void hmp_stop(MonitorHMP *hmp, const QDict *qdict); |
| 86 | void hmp_sync_profile(MonitorHMP *hmp, const QDict *qdict); |
| 87 | void hmp_system_reset(MonitorHMP *hmp, const QDict *qdict); |
| 88 | void hmp_system_powerdown(MonitorHMP *hmp, const QDict *qdict); |
| 89 | void hmp_exit_preconfig(MonitorHMP *hmp, const QDict *qdict); |
| 90 | void hmp_announce_self(MonitorHMP *hmp, const QDict *qdict); |
| 91 | void hmp_cpu(MonitorHMP *hmp, const QDict *qdict); |
| 92 | void hmp_memsave(MonitorHMP *hmp, const QDict *qdict); |
| 93 | void hmp_pmemsave(MonitorHMP *hmp, const QDict *qdict); |
| 94 | void hmp_ringbuf_write(MonitorHMP *hmp, const QDict *qdict); |
| 95 | void hmp_ringbuf_read(MonitorHMP *hmp, const QDict *qdict); |
| 96 | void hmp_cont(MonitorHMP *hmp, const QDict *qdict); |
| 97 | void hmp_system_wakeup(MonitorHMP *hmp, const QDict *qdict); |
| 98 | void hmp_nmi(MonitorHMP *hmp, const QDict *qdict); |
| 99 | void hmp_info_network(MonitorHMP *hmp, const QDict *qdict); |
| 100 | void hmp_set_link(MonitorHMP *hmp, const QDict *qdict); |
| 101 | void hmp_balloon(MonitorHMP *hmp, const QDict *qdict); |
| 102 | void hmp_loadvm(MonitorHMP *hmp, const QDict *qdict); |
| 103 | void hmp_savevm(MonitorHMP *hmp, const QDict *qdict); |
| 104 | void hmp_delvm(MonitorHMP *hmp, const QDict *qdict); |
| 105 | void hmp_migrate_cancel(MonitorHMP *hmp, const QDict *qdict); |
| 106 | void hmp_migrate_continue(MonitorHMP *hmp, const QDict *qdict); |
| 107 | void hmp_migrate_incoming(MonitorHMP *hmp, const QDict *qdict); |
| 108 | void hmp_migrate_recover(MonitorHMP *hmp, const QDict *qdict); |
| 109 | void hmp_migrate_pause(MonitorHMP *hmp, const QDict *qdict); |
| 110 | void hmp_migrate_set_capability(MonitorHMP *hmp, const QDict *qdict); |
| 111 | void hmp_migrate_set_parameter(MonitorHMP *hmp, const QDict *qdict); |
| 112 | void hmp_client_migrate_info(MonitorHMP *hmp, const QDict *qdict); |
| 113 | void hmp_migrate_start_postcopy(MonitorHMP *hmp, const QDict *qdict); |
| 114 | void hmp_x_colo_lost_heartbeat(MonitorHMP *hmp, const QDict *qdict); |
| 115 | void hmp_set_password(MonitorHMP *hmp, const QDict *qdict); |
| 116 | void hmp_expire_password(MonitorHMP *hmp, const QDict *qdict); |
| 117 | void hmp_change(MonitorHMP *hmp, const QDict *qdict); |
| 118 | #ifdef CONFIG_VNC |
| 119 | void hmp_change_vnc(MonitorHMP *hmp, const char *device, const char *target, |
| 120 | const char *arg, const char *read_only, bool force, |
| 121 | Error **errp); |
| 122 | #endif |
| 123 | void hmp_change_medium(MonitorHMP *hmp, const char *device, const char *target, |
| 124 | const char *arg, const char *read_only, bool force, |
| 125 | Error **errp); |
| 126 | void hmp_migrate(MonitorHMP *hmp, const QDict *qdict); |
| 127 | void hmp_device_add(MonitorHMP *hmp, const QDict *qdict); |
| 128 | void hmp_device_del(MonitorHMP *hmp, const QDict *qdict); |
| 129 | void hmp_dump_guest_memory(MonitorHMP *hmp, const QDict *qdict); |
| 130 | void hmp_netdev_add(MonitorHMP *hmp, const QDict *qdict); |
| 131 | void hmp_netdev_del(MonitorHMP *hmp, const QDict *qdict); |
| 132 | void hmp_getfd(MonitorHMP *hmp, const QDict *qdict); |
| 133 | void hmp_closefd(MonitorHMP *hmp, const QDict *qdict); |
| 134 | void hmp_mouse_move(MonitorHMP *hmp, const QDict *qdict); |
| 135 | void hmp_mouse_button(MonitorHMP *hmp, const QDict *qdict); |
| 136 | void hmp_mouse_set(MonitorHMP *hmp, const QDict *qdict); |
| 137 | void hmp_sendkey(MonitorHMP *hmp, const QDict *qdict); |
| 138 | void coroutine_fn hmp_screendump(MonitorHMP *hmp, const QDict *qdict); |
| 139 | void hmp_chardev_add(MonitorHMP *hmp, const QDict *qdict); |
| 140 | void hmp_chardev_change(MonitorHMP *hmp, const QDict *qdict); |
| 141 | void hmp_chardev_remove(MonitorHMP *hmp, const QDict *qdict); |
| 142 | void hmp_chardev_send_break(MonitorHMP *hmp, const QDict *qdict); |
| 143 | void hmp_object_add(MonitorHMP *hmp, const QDict *qdict); |
| 144 | void hmp_object_del(MonitorHMP *hmp, const QDict *qdict); |
| 145 | void hmp_info_memdev(MonitorHMP *hmp, const QDict *qdict); |
| 146 | void hmp_info_memory_devices(MonitorHMP *hmp, const QDict *qdict); |
| 147 | void hmp_qom_list(MonitorHMP *hmp, const QDict *qdict); |
| 148 | void hmp_qom_get(MonitorHMP *hmp, const QDict *qdict); |
| 149 | void hmp_qom_set(MonitorHMP *hmp, const QDict *qdict); |
| 150 | void hmp_info_qom_tree(MonitorHMP *hmp, const QDict *dict); |
| 151 | void hmp_virtio_query(MonitorHMP *hmp, const QDict *qdict); |
| 152 | void hmp_virtio_status(MonitorHMP *hmp, const QDict *qdict); |
| 153 | void hmp_virtio_queue_status(MonitorHMP *hmp, const QDict *qdict); |
| 154 | void hmp_vhost_queue_status(MonitorHMP *hmp, const QDict *qdict); |
| 155 | void hmp_virtio_queue_element(MonitorHMP *hmp, const QDict *qdict); |
| 156 | void hmp_xen_event_inject(MonitorHMP *hmp, const QDict *qdict); |
| 157 | void hmp_xen_event_list(MonitorHMP *hmp, const QDict *qdict); |
| 158 | void hmp_rocker(MonitorHMP *hmp, const QDict *qdict); |
| 159 | void hmp_rocker_ports(MonitorHMP *hmp, const QDict *qdict); |
| 160 | void hmp_rocker_of_dpa_flows(MonitorHMP *hmp, const QDict *qdict); |
| 161 | void hmp_rocker_of_dpa_groups(MonitorHMP *hmp, const QDict *qdict); |
| 162 | void hmp_info_dump(MonitorHMP *hmp, const QDict *qdict); |
| 163 | void hmp_hotpluggable_cpus(MonitorHMP *hmp, const QDict *qdict); |
| 164 | void hmp_info_vm_generation_id(MonitorHMP *hmp, const QDict *qdict); |
| 165 | void hmp_info_memory_size_summary(MonitorHMP *hmp, const QDict *qdict); |
| 166 | void hmp_info_replay(MonitorHMP *hmp, const QDict *qdict); |
| 167 | void hmp_replay_break(MonitorHMP *hmp, const QDict *qdict); |
| 168 | void hmp_replay_delete_break(MonitorHMP *hmp, const QDict *qdict); |
| 169 | void hmp_replay_seek(MonitorHMP *hmp, const QDict *qdict); |
| 170 | void hmp_info_dirty_rate(MonitorHMP *hmp, const QDict *qdict); |
| 171 | void hmp_calc_dirty_rate(MonitorHMP *hmp, const QDict *qdict); |
| 172 | void hmp_set_vcpu_dirty_limit(MonitorHMP *hmp, const QDict *qdict); |
| 173 | void hmp_cancel_vcpu_dirty_limit(MonitorHMP *hmp, const QDict *qdict); |
| 174 | void hmp_info_vcpu_dirty_limit(MonitorHMP *hmp, const QDict *qdict); |
| 175 | void hmp_human_readable_text_helper(Monitor *mon, |
| 176 | HumanReadableText *(*qmp_handler)(Error **)); |
| 177 | void hmp_info_stats(MonitorHMP *hmp, const QDict *qdict); |
| 178 | void hmp_one_insn_per_tb(MonitorHMP *hmp, const QDict *qdict); |
| 179 | void hmp_watchdog_action(MonitorHMP *hmp, const QDict *qdict); |
| 180 | void hmp_pcie_aer_inject_error(MonitorHMP *hmp, const QDict *qdict); |
| 181 | void hmp_info_capture(MonitorHMP *hmp, const QDict *qdict); |
| 182 | void hmp_stopcapture(MonitorHMP *hmp, const QDict *qdict); |
| 183 | void hmp_wavcapture(MonitorHMP *hmp, const QDict *qdict); |
| 184 | void hmp_trace_event(MonitorHMP *hmp, const QDict *qdict); |
| 185 | void hmp_trace_file(MonitorHMP *hmp, const QDict *qdict); |
| 186 | void hmp_info_trace_events(MonitorHMP *hmp, const QDict *qdict); |
| 187 | void hmp_help(MonitorHMP *hmp, const QDict *qdict); |
| 188 | void hmp_clear(MonitorHMP *hmp, const QDict *qdict); |
| 189 | void hmp_info_help(MonitorHMP *hmp, const QDict *qdict); |
| 190 | void hmp_info_sync_profile(MonitorHMP *hmp, const QDict *qdict); |
| 191 | void hmp_info_history(MonitorHMP *hmp, const QDict *qdict); |
| 192 | void hmp_logfile(MonitorHMP *hmp, const QDict *qdict); |
| 193 | void hmp_log(MonitorHMP *hmp, const QDict *qdict); |
| 194 | void hmp_gdbserver(MonitorHMP *hmp, const QDict *qdict); |
| 195 | void hmp_print(MonitorHMP *hmp, const QDict *qdict); |
| 196 | void hmp_sum(MonitorHMP *hmp, const QDict *qdict); |
| 197 | void hmp_ioport_read(MonitorHMP *hmp, const QDict *qdict); |
| 198 | void hmp_ioport_write(MonitorHMP *hmp, const QDict *qdict); |
| 199 | void hmp_boot_set(MonitorHMP *hmp, const QDict *qdict); |
| 200 | void hmp_info_mtree(MonitorHMP *hmp, const QDict *qdict); |
| 201 | void hmp_info_cryptodev(MonitorHMP *hmp, const QDict *qdict); |
| 202 | void hmp_dumpdtb(MonitorHMP *hmp, const QDict *qdict); |
| 203 | void hmp_info_firmware_log(MonitorHMP *hmp, const QDict *qdict); |
| 204 | void hmp_info_mem(MonitorHMP *hmp, const QDict *qdict); |
| 205 | void hmp_info_tlb(MonitorHMP *hmp, const QDict *qdict); |
| 206 | void hmp_mce(MonitorHMP *hmp, const QDict *qdict); |
| 207 | void hmp_info_local_apic(MonitorHMP *hmp, const QDict *qdict); |
| 208 | void hmp_info_sev(MonitorHMP *hmp, const QDict *qdict); |
| 209 | void hmp_info_sgx(MonitorHMP *hmp, const QDict *qdict); |
| 210 | void hmp_info_via(MonitorHMP *hmp, const QDict *qdict); |
| 211 | void hmp_memory_dump(MonitorHMP *hmp, const QDict *qdict); |
| 212 | void hmp_physical_memory_dump(MonitorHMP *hmp, const QDict *qdict); |
| 213 | void hmp_info_registers(MonitorHMP *hmp, const QDict *qdict); |
| 214 | void hmp_gva2gpa(MonitorHMP *hmp, const QDict *qdict); |
| 215 | void hmp_gpa2hva(MonitorHMP *hmp, const QDict *qdict); |
| 216 | void hmp_gpa2hpa(MonitorHMP *hmp, const QDict *qdict); |
| 217 | |
| 218 | void hmp_dump_skeys(MonitorHMP *hmp, const QDict *qdict); |
| 219 | void hmp_info_skeys(MonitorHMP *hmp, const QDict *qdict); |
| 220 | void hmp_info_cmma(MonitorHMP *hmp, const QDict *qdict); |
| 221 | void hmp_migrationmode(MonitorHMP *hmp, const QDict *qdict); |
| 222 | |
| 223 | #endif /* CONFIG_HMP */ |
| 224 | |
| 225 | #endif |