]> git.proxmox.com Git - mirror_qemu.git/blame - include/qapi/qmp/dispatch.h
Merge tag 'for-upstream' of https://gitlab.com/bonzini/qemu into staging
[mirror_qemu.git] / include / qapi / qmp / dispatch.h
CommitLineData
43c20a43
MR
1/*
2 * Core Definitions for QAPI/QMP Dispatch
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 LGPL, version 2.1 or later.
10 * See the COPYING.LIB file in the top-level directory.
11 *
12 */
13
121d0712
MA
14#ifndef QAPI_QMP_DISPATCH_H
15#define QAPI_QMP_DISPATCH_H
43c20a43 16
41725fa7 17#include "monitor/monitor.h"
452fcdbc 18#include "qemu/queue.h"
43c20a43
MR
19
20typedef void (QmpCommandFunc)(QDict *, QObject **, Error **);
21
d34b867d
LC
22typedef enum QmpCommandOptions
23{
876c6751
PX
24 QCO_NO_SUCCESS_RESP = (1U << 0),
25 QCO_ALLOW_OOB = (1U << 1),
d6fe3d02 26 QCO_ALLOW_PRECONFIG = (1U << 2),
04f22362 27 QCO_COROUTINE = (1U << 3),
d34b867d
LC
28} QmpCommandOptions;
29
43c20a43
MR
30typedef struct QmpCommand
31{
32 const char *name;
9ce44e2c 33 /* Runs in coroutine context if QCO_COROUTINE is set */
43c20a43 34 QmpCommandFunc *fn;
d34b867d 35 QmpCommandOptions options;
6604e475 36 unsigned special_features;
43c20a43 37 QTAILQ_ENTRY(QmpCommand) node;
abd6cf6d 38 bool enabled;
c98939da 39 const char *disable_reason;
43c20a43
MR
40} QmpCommand;
41
1527badb
MA
42typedef QTAILQ_HEAD(QmpCommandList, QmpCommand) QmpCommandList;
43
44void qmp_register_command(QmpCommandList *cmds, const char *name,
6604e475
MA
45 QmpCommandFunc *fn, QmpCommandOptions options,
46 unsigned special_features);
f0ccc00b
MAL
47const QmpCommand *qmp_find_command(const QmpCommandList *cmds,
48 const char *name);
c98939da
MAL
49void qmp_disable_command(QmpCommandList *cmds, const char *name,
50 const char *err_msg);
1527badb
MA
51void qmp_enable_command(QmpCommandList *cmds, const char *name);
52
8dc4d915 53bool qmp_command_is_enabled(const QmpCommand *cmd);
164dafd1 54bool qmp_command_available(const QmpCommand *cmd, Error **errp);
8dc4d915 55const char *qmp_command_name(const QmpCommand *cmd);
0106dc4f 56bool qmp_has_success_response(const QmpCommand *cmd);
cee32796 57QDict *qmp_error_response(Error *err);
a50c99bc
PB
58QDict *coroutine_mixed_fn qmp_dispatch(const QmpCommandList *cmds, QObject *request,
59 bool allow_oob, Monitor *cur_mon);
2aa788f5 60bool qmp_is_oob(const QDict *dict);
1527badb 61
f0ccc00b 62typedef void (*qmp_cmd_callback_fn)(const QmpCommand *cmd, void *opaque);
1527badb 63
f0ccc00b 64void qmp_for_each_command(const QmpCommandList *cmds, qmp_cmd_callback_fn fn,
1527badb 65 void *opaque);
43c20a43
MR
66
67#endif