]>
Commit | Line | Data |
---|---|---|
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 | |
20 | typedef void (QmpCommandFunc)(QDict *, QObject **, Error **); | |
21 | ||
d34b867d LC |
22 | typedef 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 |
30 | typedef 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 |
42 | typedef QTAILQ_HEAD(QmpCommandList, QmpCommand) QmpCommandList; |
43 | ||
44 | void qmp_register_command(QmpCommandList *cmds, const char *name, | |
6604e475 MA |
45 | QmpCommandFunc *fn, QmpCommandOptions options, |
46 | unsigned special_features); | |
f0ccc00b MAL |
47 | const QmpCommand *qmp_find_command(const QmpCommandList *cmds, |
48 | const char *name); | |
c98939da MAL |
49 | void qmp_disable_command(QmpCommandList *cmds, const char *name, |
50 | const char *err_msg); | |
1527badb MA |
51 | void qmp_enable_command(QmpCommandList *cmds, const char *name); |
52 | ||
8dc4d915 | 53 | bool qmp_command_is_enabled(const QmpCommand *cmd); |
164dafd1 | 54 | bool qmp_command_available(const QmpCommand *cmd, Error **errp); |
8dc4d915 | 55 | const char *qmp_command_name(const QmpCommand *cmd); |
0106dc4f | 56 | bool qmp_has_success_response(const QmpCommand *cmd); |
cee32796 | 57 | QDict *qmp_error_response(Error *err); |
a50c99bc PB |
58 | QDict *coroutine_mixed_fn qmp_dispatch(const QmpCommandList *cmds, QObject *request, |
59 | bool allow_oob, Monitor *cur_mon); | |
2aa788f5 | 60 | bool qmp_is_oob(const QDict *dict); |
1527badb | 61 | |
f0ccc00b | 62 | typedef void (*qmp_cmd_callback_fn)(const QmpCommand *cmd, void *opaque); |
1527badb | 63 | |
f0ccc00b | 64 | void qmp_for_each_command(const QmpCommandList *cmds, qmp_cmd_callback_fn fn, |
1527badb | 65 | void *opaque); |
43c20a43 MR |
66 | |
67 | #endif |