• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* THIS FILE IS AUTOMATICALLY GENERATED, DO NOT MODIFY */
2 
3 /*
4  * schema-defined QMP->QAPI command dispatch
5  *
6  * Copyright IBM, Corp. 2011
7  *
8  * Authors:
9  *  Anthony Liguori   <aliguori@us.ibm.com>
10  *
11  * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
12  * See the COPYING.LIB file in the top-level directory.
13  *
14  */
15 
16 #include "qemu-common.h"
17 #include "qemu/module.h"
18 #include "qapi/qmp/qerror.h"
19 #include "qapi/qmp/types.h"
20 #include "qapi/qmp/dispatch.h"
21 #include "qapi/visitor.h"
22 #include "qapi/qmp-output-visitor.h"
23 #include "qapi/qmp-input-visitor.h"
24 #include "qapi/dealloc-visitor.h"
25 #include "qapi-types.h"
26 #include "qapi-visit.h"
27 
28 #include "qmp-commands.h"
29 
qmp_marshal_input_add_client(Monitor * mon,const QDict * qdict,QObject ** ret)30 int qmp_marshal_input_add_client(Monitor *mon, const QDict *qdict, QObject **ret)
31 {
32     Error *local_err = NULL;
33     Error **errp = &local_err;
34     QDict *args = (QDict *)qdict;
35     QmpInputVisitor *mi;
36     QapiDeallocVisitor *md;
37     Visitor *v;
38     char * protocol = NULL;
39     char * fdname = NULL;
40     bool has_skipauth = false;
41     bool skipauth;
42     bool has_tls = false;
43     bool tls;
44 
45     mi = qmp_input_visitor_new_strict(QOBJECT(args));
46     v = qmp_input_get_visitor(mi);
47     visit_type_str(v, &protocol, "protocol", errp);
48     visit_type_str(v, &fdname, "fdname", errp);
49     visit_start_optional(v, &has_skipauth, "skipauth", errp);
50     if (has_skipauth) {
51         visit_type_bool(v, &skipauth, "skipauth", errp);
52     }
53     visit_end_optional(v, errp);
54     visit_start_optional(v, &has_tls, "tls", errp);
55     if (has_tls) {
56         visit_type_bool(v, &tls, "tls", errp);
57     }
58     visit_end_optional(v, errp);
59     qmp_input_visitor_cleanup(mi);
60 
61     if (error_is_set(errp)) {
62         goto out;
63     }
64     qmp_add_client(protocol, fdname, has_skipauth, skipauth, has_tls, tls, errp);
65 
66 out:
67     md = qapi_dealloc_visitor_new();
68     v = qapi_dealloc_get_visitor(md);
69     visit_type_str(v, &protocol, "protocol", NULL);
70     visit_type_str(v, &fdname, "fdname", NULL);
71     visit_start_optional(v, &has_skipauth, "skipauth", NULL);
72     if (has_skipauth) {
73         visit_type_bool(v, &skipauth, "skipauth", NULL);
74     }
75     visit_end_optional(v, NULL);
76     visit_start_optional(v, &has_tls, "tls", NULL);
77     if (has_tls) {
78         visit_type_bool(v, &tls, "tls", NULL);
79     }
80     visit_end_optional(v, NULL);
81     qapi_dealloc_visitor_cleanup(md);
82 
83     if (local_err) {
84         qerror_report_err(local_err);
85         error_free(local_err);
86         return -1;
87     }
88     return 0;
89 }
90 
qmp_marshal_output_query_name(NameInfo * ret_in,QObject ** ret_out,Error ** errp)91 static void qmp_marshal_output_query_name(NameInfo * ret_in, QObject **ret_out, Error **errp)
92 {
93     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
94     QmpOutputVisitor *mo = qmp_output_visitor_new();
95     Visitor *v;
96 
97     v = qmp_output_get_visitor(mo);
98     visit_type_NameInfo(v, &ret_in, "unused", errp);
99     if (!error_is_set(errp)) {
100         *ret_out = qmp_output_get_qobject(mo);
101     }
102     qmp_output_visitor_cleanup(mo);
103     v = qapi_dealloc_get_visitor(md);
104     visit_type_NameInfo(v, &ret_in, "unused", NULL);
105     qapi_dealloc_visitor_cleanup(md);
106 }
107 
qmp_marshal_input_query_name(Monitor * mon,const QDict * qdict,QObject ** ret)108 int qmp_marshal_input_query_name(Monitor *mon, const QDict *qdict, QObject **ret)
109 {
110     Error *local_err = NULL;
111     Error **errp = &local_err;
112     QDict *args = (QDict *)qdict;
113     NameInfo * retval = NULL;
114     (void)args;
115     if (error_is_set(errp)) {
116         goto out;
117     }
118     retval = qmp_query_name(errp);
119     if (!error_is_set(errp)) {
120         qmp_marshal_output_query_name(retval, ret, errp);
121     }
122 
123 out:
124 
125 
126     if (local_err) {
127         qerror_report_err(local_err);
128         error_free(local_err);
129         return -1;
130     }
131     return 0;
132 }
133 
qmp_marshal_output_query_version(VersionInfo * ret_in,QObject ** ret_out,Error ** errp)134 static void qmp_marshal_output_query_version(VersionInfo * ret_in, QObject **ret_out, Error **errp)
135 {
136     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
137     QmpOutputVisitor *mo = qmp_output_visitor_new();
138     Visitor *v;
139 
140     v = qmp_output_get_visitor(mo);
141     visit_type_VersionInfo(v, &ret_in, "unused", errp);
142     if (!error_is_set(errp)) {
143         *ret_out = qmp_output_get_qobject(mo);
144     }
145     qmp_output_visitor_cleanup(mo);
146     v = qapi_dealloc_get_visitor(md);
147     visit_type_VersionInfo(v, &ret_in, "unused", NULL);
148     qapi_dealloc_visitor_cleanup(md);
149 }
150 
qmp_marshal_input_query_version(Monitor * mon,const QDict * qdict,QObject ** ret)151 int qmp_marshal_input_query_version(Monitor *mon, const QDict *qdict, QObject **ret)
152 {
153     Error *local_err = NULL;
154     Error **errp = &local_err;
155     QDict *args = (QDict *)qdict;
156     VersionInfo * retval = NULL;
157     (void)args;
158     if (error_is_set(errp)) {
159         goto out;
160     }
161     retval = qmp_query_version(errp);
162     if (!error_is_set(errp)) {
163         qmp_marshal_output_query_version(retval, ret, errp);
164     }
165 
166 out:
167 
168 
169     if (local_err) {
170         qerror_report_err(local_err);
171         error_free(local_err);
172         return -1;
173     }
174     return 0;
175 }
176 
qmp_marshal_output_query_kvm(KvmInfo * ret_in,QObject ** ret_out,Error ** errp)177 static void qmp_marshal_output_query_kvm(KvmInfo * ret_in, QObject **ret_out, Error **errp)
178 {
179     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
180     QmpOutputVisitor *mo = qmp_output_visitor_new();
181     Visitor *v;
182 
183     v = qmp_output_get_visitor(mo);
184     visit_type_KvmInfo(v, &ret_in, "unused", errp);
185     if (!error_is_set(errp)) {
186         *ret_out = qmp_output_get_qobject(mo);
187     }
188     qmp_output_visitor_cleanup(mo);
189     v = qapi_dealloc_get_visitor(md);
190     visit_type_KvmInfo(v, &ret_in, "unused", NULL);
191     qapi_dealloc_visitor_cleanup(md);
192 }
193 
qmp_marshal_input_query_kvm(Monitor * mon,const QDict * qdict,QObject ** ret)194 int qmp_marshal_input_query_kvm(Monitor *mon, const QDict *qdict, QObject **ret)
195 {
196     Error *local_err = NULL;
197     Error **errp = &local_err;
198     QDict *args = (QDict *)qdict;
199     KvmInfo * retval = NULL;
200     (void)args;
201     if (error_is_set(errp)) {
202         goto out;
203     }
204     retval = qmp_query_kvm(errp);
205     if (!error_is_set(errp)) {
206         qmp_marshal_output_query_kvm(retval, ret, errp);
207     }
208 
209 out:
210 
211 
212     if (local_err) {
213         qerror_report_err(local_err);
214         error_free(local_err);
215         return -1;
216     }
217     return 0;
218 }
219 
qmp_marshal_output_query_status(StatusInfo * ret_in,QObject ** ret_out,Error ** errp)220 static void qmp_marshal_output_query_status(StatusInfo * ret_in, QObject **ret_out, Error **errp)
221 {
222     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
223     QmpOutputVisitor *mo = qmp_output_visitor_new();
224     Visitor *v;
225 
226     v = qmp_output_get_visitor(mo);
227     visit_type_StatusInfo(v, &ret_in, "unused", errp);
228     if (!error_is_set(errp)) {
229         *ret_out = qmp_output_get_qobject(mo);
230     }
231     qmp_output_visitor_cleanup(mo);
232     v = qapi_dealloc_get_visitor(md);
233     visit_type_StatusInfo(v, &ret_in, "unused", NULL);
234     qapi_dealloc_visitor_cleanup(md);
235 }
236 
qmp_marshal_input_query_status(Monitor * mon,const QDict * qdict,QObject ** ret)237 int qmp_marshal_input_query_status(Monitor *mon, const QDict *qdict, QObject **ret)
238 {
239     Error *local_err = NULL;
240     Error **errp = &local_err;
241     QDict *args = (QDict *)qdict;
242     StatusInfo * retval = NULL;
243     (void)args;
244     if (error_is_set(errp)) {
245         goto out;
246     }
247     retval = qmp_query_status(errp);
248     if (!error_is_set(errp)) {
249         qmp_marshal_output_query_status(retval, ret, errp);
250     }
251 
252 out:
253 
254 
255     if (local_err) {
256         qerror_report_err(local_err);
257         error_free(local_err);
258         return -1;
259     }
260     return 0;
261 }
262 
qmp_marshal_output_query_uuid(UuidInfo * ret_in,QObject ** ret_out,Error ** errp)263 static void qmp_marshal_output_query_uuid(UuidInfo * ret_in, QObject **ret_out, Error **errp)
264 {
265     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
266     QmpOutputVisitor *mo = qmp_output_visitor_new();
267     Visitor *v;
268 
269     v = qmp_output_get_visitor(mo);
270     visit_type_UuidInfo(v, &ret_in, "unused", errp);
271     if (!error_is_set(errp)) {
272         *ret_out = qmp_output_get_qobject(mo);
273     }
274     qmp_output_visitor_cleanup(mo);
275     v = qapi_dealloc_get_visitor(md);
276     visit_type_UuidInfo(v, &ret_in, "unused", NULL);
277     qapi_dealloc_visitor_cleanup(md);
278 }
279 
qmp_marshal_input_query_uuid(Monitor * mon,const QDict * qdict,QObject ** ret)280 int qmp_marshal_input_query_uuid(Monitor *mon, const QDict *qdict, QObject **ret)
281 {
282     Error *local_err = NULL;
283     Error **errp = &local_err;
284     QDict *args = (QDict *)qdict;
285     UuidInfo * retval = NULL;
286     (void)args;
287     if (error_is_set(errp)) {
288         goto out;
289     }
290     retval = qmp_query_uuid(errp);
291     if (!error_is_set(errp)) {
292         qmp_marshal_output_query_uuid(retval, ret, errp);
293     }
294 
295 out:
296 
297 
298     if (local_err) {
299         qerror_report_err(local_err);
300         error_free(local_err);
301         return -1;
302     }
303     return 0;
304 }
305 
qmp_marshal_output_query_chardev(ChardevInfoList * ret_in,QObject ** ret_out,Error ** errp)306 static void qmp_marshal_output_query_chardev(ChardevInfoList * ret_in, QObject **ret_out, Error **errp)
307 {
308     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
309     QmpOutputVisitor *mo = qmp_output_visitor_new();
310     Visitor *v;
311 
312     v = qmp_output_get_visitor(mo);
313     visit_type_ChardevInfoList(v, &ret_in, "unused", errp);
314     if (!error_is_set(errp)) {
315         *ret_out = qmp_output_get_qobject(mo);
316     }
317     qmp_output_visitor_cleanup(mo);
318     v = qapi_dealloc_get_visitor(md);
319     visit_type_ChardevInfoList(v, &ret_in, "unused", NULL);
320     qapi_dealloc_visitor_cleanup(md);
321 }
322 
qmp_marshal_input_query_chardev(Monitor * mon,const QDict * qdict,QObject ** ret)323 int qmp_marshal_input_query_chardev(Monitor *mon, const QDict *qdict, QObject **ret)
324 {
325     Error *local_err = NULL;
326     Error **errp = &local_err;
327     QDict *args = (QDict *)qdict;
328     ChardevInfoList * retval = NULL;
329     (void)args;
330     if (error_is_set(errp)) {
331         goto out;
332     }
333     retval = qmp_query_chardev(errp);
334     if (!error_is_set(errp)) {
335         qmp_marshal_output_query_chardev(retval, ret, errp);
336     }
337 
338 out:
339 
340 
341     if (local_err) {
342         qerror_report_err(local_err);
343         error_free(local_err);
344         return -1;
345     }
346     return 0;
347 }
348 
qmp_marshal_input_ringbuf_write(Monitor * mon,const QDict * qdict,QObject ** ret)349 int qmp_marshal_input_ringbuf_write(Monitor *mon, const QDict *qdict, QObject **ret)
350 {
351     Error *local_err = NULL;
352     Error **errp = &local_err;
353     QDict *args = (QDict *)qdict;
354     QmpInputVisitor *mi;
355     QapiDeallocVisitor *md;
356     Visitor *v;
357     char * device = NULL;
358     char * data = NULL;
359     bool has_format = false;
360     DataFormat format;
361 
362     mi = qmp_input_visitor_new_strict(QOBJECT(args));
363     v = qmp_input_get_visitor(mi);
364     visit_type_str(v, &device, "device", errp);
365     visit_type_str(v, &data, "data", errp);
366     visit_start_optional(v, &has_format, "format", errp);
367     if (has_format) {
368         visit_type_DataFormat(v, &format, "format", errp);
369     }
370     visit_end_optional(v, errp);
371     qmp_input_visitor_cleanup(mi);
372 
373     if (error_is_set(errp)) {
374         goto out;
375     }
376     qmp_ringbuf_write(device, data, has_format, format, errp);
377 
378 out:
379     md = qapi_dealloc_visitor_new();
380     v = qapi_dealloc_get_visitor(md);
381     visit_type_str(v, &device, "device", NULL);
382     visit_type_str(v, &data, "data", NULL);
383     visit_start_optional(v, &has_format, "format", NULL);
384     if (has_format) {
385         visit_type_DataFormat(v, &format, "format", NULL);
386     }
387     visit_end_optional(v, NULL);
388     qapi_dealloc_visitor_cleanup(md);
389 
390     if (local_err) {
391         qerror_report_err(local_err);
392         error_free(local_err);
393         return -1;
394     }
395     return 0;
396 }
397 
qmp_marshal_output_ringbuf_read(char * ret_in,QObject ** ret_out,Error ** errp)398 static void qmp_marshal_output_ringbuf_read(char * ret_in, QObject **ret_out, Error **errp)
399 {
400     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
401     QmpOutputVisitor *mo = qmp_output_visitor_new();
402     Visitor *v;
403 
404     v = qmp_output_get_visitor(mo);
405     visit_type_str(v, &ret_in, "unused", errp);
406     if (!error_is_set(errp)) {
407         *ret_out = qmp_output_get_qobject(mo);
408     }
409     qmp_output_visitor_cleanup(mo);
410     v = qapi_dealloc_get_visitor(md);
411     visit_type_str(v, &ret_in, "unused", NULL);
412     qapi_dealloc_visitor_cleanup(md);
413 }
414 
qmp_marshal_input_ringbuf_read(Monitor * mon,const QDict * qdict,QObject ** ret)415 int qmp_marshal_input_ringbuf_read(Monitor *mon, const QDict *qdict, QObject **ret)
416 {
417     Error *local_err = NULL;
418     Error **errp = &local_err;
419     QDict *args = (QDict *)qdict;
420     char * retval = NULL;
421     QmpInputVisitor *mi;
422     QapiDeallocVisitor *md;
423     Visitor *v;
424     char * device = NULL;
425     int64_t size;
426     bool has_format = false;
427     DataFormat format;
428 
429     mi = qmp_input_visitor_new_strict(QOBJECT(args));
430     v = qmp_input_get_visitor(mi);
431     visit_type_str(v, &device, "device", errp);
432     visit_type_int(v, &size, "size", errp);
433     visit_start_optional(v, &has_format, "format", errp);
434     if (has_format) {
435         visit_type_DataFormat(v, &format, "format", errp);
436     }
437     visit_end_optional(v, errp);
438     qmp_input_visitor_cleanup(mi);
439 
440     if (error_is_set(errp)) {
441         goto out;
442     }
443     retval = qmp_ringbuf_read(device, size, has_format, format, errp);
444     if (!error_is_set(errp)) {
445         qmp_marshal_output_ringbuf_read(retval, ret, errp);
446     }
447 
448 out:
449     md = qapi_dealloc_visitor_new();
450     v = qapi_dealloc_get_visitor(md);
451     visit_type_str(v, &device, "device", NULL);
452     visit_type_int(v, &size, "size", NULL);
453     visit_start_optional(v, &has_format, "format", NULL);
454     if (has_format) {
455         visit_type_DataFormat(v, &format, "format", NULL);
456     }
457     visit_end_optional(v, NULL);
458     qapi_dealloc_visitor_cleanup(md);
459 
460     if (local_err) {
461         qerror_report_err(local_err);
462         error_free(local_err);
463         return -1;
464     }
465     return 0;
466 }
467 
qmp_marshal_output_query_commands(CommandInfoList * ret_in,QObject ** ret_out,Error ** errp)468 static void qmp_marshal_output_query_commands(CommandInfoList * ret_in, QObject **ret_out, Error **errp)
469 {
470     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
471     QmpOutputVisitor *mo = qmp_output_visitor_new();
472     Visitor *v;
473 
474     v = qmp_output_get_visitor(mo);
475     visit_type_CommandInfoList(v, &ret_in, "unused", errp);
476     if (!error_is_set(errp)) {
477         *ret_out = qmp_output_get_qobject(mo);
478     }
479     qmp_output_visitor_cleanup(mo);
480     v = qapi_dealloc_get_visitor(md);
481     visit_type_CommandInfoList(v, &ret_in, "unused", NULL);
482     qapi_dealloc_visitor_cleanup(md);
483 }
484 
qmp_marshal_input_query_commands(Monitor * mon,const QDict * qdict,QObject ** ret)485 int qmp_marshal_input_query_commands(Monitor *mon, const QDict *qdict, QObject **ret)
486 {
487     Error *local_err = NULL;
488     Error **errp = &local_err;
489     QDict *args = (QDict *)qdict;
490     CommandInfoList * retval = NULL;
491     (void)args;
492     if (error_is_set(errp)) {
493         goto out;
494     }
495     retval = qmp_query_commands(errp);
496     if (!error_is_set(errp)) {
497         qmp_marshal_output_query_commands(retval, ret, errp);
498     }
499 
500 out:
501 
502 
503     if (local_err) {
504         qerror_report_err(local_err);
505         error_free(local_err);
506         return -1;
507     }
508     return 0;
509 }
510 
qmp_marshal_output_query_events(EventInfoList * ret_in,QObject ** ret_out,Error ** errp)511 static void qmp_marshal_output_query_events(EventInfoList * ret_in, QObject **ret_out, Error **errp)
512 {
513     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
514     QmpOutputVisitor *mo = qmp_output_visitor_new();
515     Visitor *v;
516 
517     v = qmp_output_get_visitor(mo);
518     visit_type_EventInfoList(v, &ret_in, "unused", errp);
519     if (!error_is_set(errp)) {
520         *ret_out = qmp_output_get_qobject(mo);
521     }
522     qmp_output_visitor_cleanup(mo);
523     v = qapi_dealloc_get_visitor(md);
524     visit_type_EventInfoList(v, &ret_in, "unused", NULL);
525     qapi_dealloc_visitor_cleanup(md);
526 }
527 
qmp_marshal_input_query_events(Monitor * mon,const QDict * qdict,QObject ** ret)528 int qmp_marshal_input_query_events(Monitor *mon, const QDict *qdict, QObject **ret)
529 {
530     Error *local_err = NULL;
531     Error **errp = &local_err;
532     QDict *args = (QDict *)qdict;
533     EventInfoList * retval = NULL;
534     (void)args;
535     if (error_is_set(errp)) {
536         goto out;
537     }
538     retval = qmp_query_events(errp);
539     if (!error_is_set(errp)) {
540         qmp_marshal_output_query_events(retval, ret, errp);
541     }
542 
543 out:
544 
545 
546     if (local_err) {
547         qerror_report_err(local_err);
548         error_free(local_err);
549         return -1;
550     }
551     return 0;
552 }
553 
qmp_marshal_output_query_migrate(MigrationInfo * ret_in,QObject ** ret_out,Error ** errp)554 static void qmp_marshal_output_query_migrate(MigrationInfo * ret_in, QObject **ret_out, Error **errp)
555 {
556     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
557     QmpOutputVisitor *mo = qmp_output_visitor_new();
558     Visitor *v;
559 
560     v = qmp_output_get_visitor(mo);
561     visit_type_MigrationInfo(v, &ret_in, "unused", errp);
562     if (!error_is_set(errp)) {
563         *ret_out = qmp_output_get_qobject(mo);
564     }
565     qmp_output_visitor_cleanup(mo);
566     v = qapi_dealloc_get_visitor(md);
567     visit_type_MigrationInfo(v, &ret_in, "unused", NULL);
568     qapi_dealloc_visitor_cleanup(md);
569 }
570 
qmp_marshal_input_query_migrate(Monitor * mon,const QDict * qdict,QObject ** ret)571 int qmp_marshal_input_query_migrate(Monitor *mon, const QDict *qdict, QObject **ret)
572 {
573     Error *local_err = NULL;
574     Error **errp = &local_err;
575     QDict *args = (QDict *)qdict;
576     MigrationInfo * retval = NULL;
577     (void)args;
578     if (error_is_set(errp)) {
579         goto out;
580     }
581     retval = qmp_query_migrate(errp);
582     if (!error_is_set(errp)) {
583         qmp_marshal_output_query_migrate(retval, ret, errp);
584     }
585 
586 out:
587 
588 
589     if (local_err) {
590         qerror_report_err(local_err);
591         error_free(local_err);
592         return -1;
593     }
594     return 0;
595 }
596 
qmp_marshal_input_migrate_set_capabilities(Monitor * mon,const QDict * qdict,QObject ** ret)597 int qmp_marshal_input_migrate_set_capabilities(Monitor *mon, const QDict *qdict, QObject **ret)
598 {
599     Error *local_err = NULL;
600     Error **errp = &local_err;
601     QDict *args = (QDict *)qdict;
602     QmpInputVisitor *mi;
603     QapiDeallocVisitor *md;
604     Visitor *v;
605     MigrationCapabilityStatusList * capabilities = NULL;
606 
607     mi = qmp_input_visitor_new_strict(QOBJECT(args));
608     v = qmp_input_get_visitor(mi);
609     visit_type_MigrationCapabilityStatusList(v, &capabilities, "capabilities", errp);
610     qmp_input_visitor_cleanup(mi);
611 
612     if (error_is_set(errp)) {
613         goto out;
614     }
615     qmp_migrate_set_capabilities(capabilities, errp);
616 
617 out:
618     md = qapi_dealloc_visitor_new();
619     v = qapi_dealloc_get_visitor(md);
620     visit_type_MigrationCapabilityStatusList(v, &capabilities, "capabilities", NULL);
621     qapi_dealloc_visitor_cleanup(md);
622 
623     if (local_err) {
624         qerror_report_err(local_err);
625         error_free(local_err);
626         return -1;
627     }
628     return 0;
629 }
630 
qmp_marshal_output_query_migrate_capabilities(MigrationCapabilityStatusList * ret_in,QObject ** ret_out,Error ** errp)631 static void qmp_marshal_output_query_migrate_capabilities(MigrationCapabilityStatusList * ret_in, QObject **ret_out, Error **errp)
632 {
633     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
634     QmpOutputVisitor *mo = qmp_output_visitor_new();
635     Visitor *v;
636 
637     v = qmp_output_get_visitor(mo);
638     visit_type_MigrationCapabilityStatusList(v, &ret_in, "unused", errp);
639     if (!error_is_set(errp)) {
640         *ret_out = qmp_output_get_qobject(mo);
641     }
642     qmp_output_visitor_cleanup(mo);
643     v = qapi_dealloc_get_visitor(md);
644     visit_type_MigrationCapabilityStatusList(v, &ret_in, "unused", NULL);
645     qapi_dealloc_visitor_cleanup(md);
646 }
647 
qmp_marshal_input_query_migrate_capabilities(Monitor * mon,const QDict * qdict,QObject ** ret)648 int qmp_marshal_input_query_migrate_capabilities(Monitor *mon, const QDict *qdict, QObject **ret)
649 {
650     Error *local_err = NULL;
651     Error **errp = &local_err;
652     QDict *args = (QDict *)qdict;
653     MigrationCapabilityStatusList * retval = NULL;
654     (void)args;
655     if (error_is_set(errp)) {
656         goto out;
657     }
658     retval = qmp_query_migrate_capabilities(errp);
659     if (!error_is_set(errp)) {
660         qmp_marshal_output_query_migrate_capabilities(retval, ret, errp);
661     }
662 
663 out:
664 
665 
666     if (local_err) {
667         qerror_report_err(local_err);
668         error_free(local_err);
669         return -1;
670     }
671     return 0;
672 }
673 
qmp_marshal_output_query_mice(MouseInfoList * ret_in,QObject ** ret_out,Error ** errp)674 static void qmp_marshal_output_query_mice(MouseInfoList * ret_in, QObject **ret_out, Error **errp)
675 {
676     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
677     QmpOutputVisitor *mo = qmp_output_visitor_new();
678     Visitor *v;
679 
680     v = qmp_output_get_visitor(mo);
681     visit_type_MouseInfoList(v, &ret_in, "unused", errp);
682     if (!error_is_set(errp)) {
683         *ret_out = qmp_output_get_qobject(mo);
684     }
685     qmp_output_visitor_cleanup(mo);
686     v = qapi_dealloc_get_visitor(md);
687     visit_type_MouseInfoList(v, &ret_in, "unused", NULL);
688     qapi_dealloc_visitor_cleanup(md);
689 }
690 
qmp_marshal_input_query_mice(Monitor * mon,const QDict * qdict,QObject ** ret)691 int qmp_marshal_input_query_mice(Monitor *mon, const QDict *qdict, QObject **ret)
692 {
693     Error *local_err = NULL;
694     Error **errp = &local_err;
695     QDict *args = (QDict *)qdict;
696     MouseInfoList * retval = NULL;
697     (void)args;
698     if (error_is_set(errp)) {
699         goto out;
700     }
701     retval = qmp_query_mice(errp);
702     if (!error_is_set(errp)) {
703         qmp_marshal_output_query_mice(retval, ret, errp);
704     }
705 
706 out:
707 
708 
709     if (local_err) {
710         qerror_report_err(local_err);
711         error_free(local_err);
712         return -1;
713     }
714     return 0;
715 }
716 
qmp_marshal_output_query_cpus(CpuInfoList * ret_in,QObject ** ret_out,Error ** errp)717 static void qmp_marshal_output_query_cpus(CpuInfoList * ret_in, QObject **ret_out, Error **errp)
718 {
719     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
720     QmpOutputVisitor *mo = qmp_output_visitor_new();
721     Visitor *v;
722 
723     v = qmp_output_get_visitor(mo);
724     visit_type_CpuInfoList(v, &ret_in, "unused", errp);
725     if (!error_is_set(errp)) {
726         *ret_out = qmp_output_get_qobject(mo);
727     }
728     qmp_output_visitor_cleanup(mo);
729     v = qapi_dealloc_get_visitor(md);
730     visit_type_CpuInfoList(v, &ret_in, "unused", NULL);
731     qapi_dealloc_visitor_cleanup(md);
732 }
733 
qmp_marshal_input_query_cpus(Monitor * mon,const QDict * qdict,QObject ** ret)734 int qmp_marshal_input_query_cpus(Monitor *mon, const QDict *qdict, QObject **ret)
735 {
736     Error *local_err = NULL;
737     Error **errp = &local_err;
738     QDict *args = (QDict *)qdict;
739     CpuInfoList * retval = NULL;
740     (void)args;
741     if (error_is_set(errp)) {
742         goto out;
743     }
744     retval = qmp_query_cpus(errp);
745     if (!error_is_set(errp)) {
746         qmp_marshal_output_query_cpus(retval, ret, errp);
747     }
748 
749 out:
750 
751 
752     if (local_err) {
753         qerror_report_err(local_err);
754         error_free(local_err);
755         return -1;
756     }
757     return 0;
758 }
759 
qmp_marshal_output_query_block(BlockInfoList * ret_in,QObject ** ret_out,Error ** errp)760 static void qmp_marshal_output_query_block(BlockInfoList * ret_in, QObject **ret_out, Error **errp)
761 {
762     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
763     QmpOutputVisitor *mo = qmp_output_visitor_new();
764     Visitor *v;
765 
766     v = qmp_output_get_visitor(mo);
767     visit_type_BlockInfoList(v, &ret_in, "unused", errp);
768     if (!error_is_set(errp)) {
769         *ret_out = qmp_output_get_qobject(mo);
770     }
771     qmp_output_visitor_cleanup(mo);
772     v = qapi_dealloc_get_visitor(md);
773     visit_type_BlockInfoList(v, &ret_in, "unused", NULL);
774     qapi_dealloc_visitor_cleanup(md);
775 }
776 
qmp_marshal_input_query_block(Monitor * mon,const QDict * qdict,QObject ** ret)777 int qmp_marshal_input_query_block(Monitor *mon, const QDict *qdict, QObject **ret)
778 {
779     Error *local_err = NULL;
780     Error **errp = &local_err;
781     QDict *args = (QDict *)qdict;
782     BlockInfoList * retval = NULL;
783     (void)args;
784     if (error_is_set(errp)) {
785         goto out;
786     }
787     retval = qmp_query_block(errp);
788     if (!error_is_set(errp)) {
789         qmp_marshal_output_query_block(retval, ret, errp);
790     }
791 
792 out:
793 
794 
795     if (local_err) {
796         qerror_report_err(local_err);
797         error_free(local_err);
798         return -1;
799     }
800     return 0;
801 }
802 
qmp_marshal_output_query_blockstats(BlockStatsList * ret_in,QObject ** ret_out,Error ** errp)803 static void qmp_marshal_output_query_blockstats(BlockStatsList * ret_in, QObject **ret_out, Error **errp)
804 {
805     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
806     QmpOutputVisitor *mo = qmp_output_visitor_new();
807     Visitor *v;
808 
809     v = qmp_output_get_visitor(mo);
810     visit_type_BlockStatsList(v, &ret_in, "unused", errp);
811     if (!error_is_set(errp)) {
812         *ret_out = qmp_output_get_qobject(mo);
813     }
814     qmp_output_visitor_cleanup(mo);
815     v = qapi_dealloc_get_visitor(md);
816     visit_type_BlockStatsList(v, &ret_in, "unused", NULL);
817     qapi_dealloc_visitor_cleanup(md);
818 }
819 
qmp_marshal_input_query_blockstats(Monitor * mon,const QDict * qdict,QObject ** ret)820 int qmp_marshal_input_query_blockstats(Monitor *mon, const QDict *qdict, QObject **ret)
821 {
822     Error *local_err = NULL;
823     Error **errp = &local_err;
824     QDict *args = (QDict *)qdict;
825     BlockStatsList * retval = NULL;
826     (void)args;
827     if (error_is_set(errp)) {
828         goto out;
829     }
830     retval = qmp_query_blockstats(errp);
831     if (!error_is_set(errp)) {
832         qmp_marshal_output_query_blockstats(retval, ret, errp);
833     }
834 
835 out:
836 
837 
838     if (local_err) {
839         qerror_report_err(local_err);
840         error_free(local_err);
841         return -1;
842     }
843     return 0;
844 }
845 
qmp_marshal_output_query_vnc(VncInfo * ret_in,QObject ** ret_out,Error ** errp)846 static void qmp_marshal_output_query_vnc(VncInfo * ret_in, QObject **ret_out, Error **errp)
847 {
848     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
849     QmpOutputVisitor *mo = qmp_output_visitor_new();
850     Visitor *v;
851 
852     v = qmp_output_get_visitor(mo);
853     visit_type_VncInfo(v, &ret_in, "unused", errp);
854     if (!error_is_set(errp)) {
855         *ret_out = qmp_output_get_qobject(mo);
856     }
857     qmp_output_visitor_cleanup(mo);
858     v = qapi_dealloc_get_visitor(md);
859     visit_type_VncInfo(v, &ret_in, "unused", NULL);
860     qapi_dealloc_visitor_cleanup(md);
861 }
862 
qmp_marshal_input_query_vnc(Monitor * mon,const QDict * qdict,QObject ** ret)863 int qmp_marshal_input_query_vnc(Monitor *mon, const QDict *qdict, QObject **ret)
864 {
865     Error *local_err = NULL;
866     Error **errp = &local_err;
867     QDict *args = (QDict *)qdict;
868     VncInfo * retval = NULL;
869     (void)args;
870     if (error_is_set(errp)) {
871         goto out;
872     }
873     retval = qmp_query_vnc(errp);
874     if (!error_is_set(errp)) {
875         qmp_marshal_output_query_vnc(retval, ret, errp);
876     }
877 
878 out:
879 
880 
881     if (local_err) {
882         qerror_report_err(local_err);
883         error_free(local_err);
884         return -1;
885     }
886     return 0;
887 }
888 
qmp_marshal_output_query_spice(SpiceInfo * ret_in,QObject ** ret_out,Error ** errp)889 static void qmp_marshal_output_query_spice(SpiceInfo * ret_in, QObject **ret_out, Error **errp)
890 {
891     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
892     QmpOutputVisitor *mo = qmp_output_visitor_new();
893     Visitor *v;
894 
895     v = qmp_output_get_visitor(mo);
896     visit_type_SpiceInfo(v, &ret_in, "unused", errp);
897     if (!error_is_set(errp)) {
898         *ret_out = qmp_output_get_qobject(mo);
899     }
900     qmp_output_visitor_cleanup(mo);
901     v = qapi_dealloc_get_visitor(md);
902     visit_type_SpiceInfo(v, &ret_in, "unused", NULL);
903     qapi_dealloc_visitor_cleanup(md);
904 }
905 
qmp_marshal_input_query_spice(Monitor * mon,const QDict * qdict,QObject ** ret)906 int qmp_marshal_input_query_spice(Monitor *mon, const QDict *qdict, QObject **ret)
907 {
908     Error *local_err = NULL;
909     Error **errp = &local_err;
910     QDict *args = (QDict *)qdict;
911     SpiceInfo * retval = NULL;
912     (void)args;
913     if (error_is_set(errp)) {
914         goto out;
915     }
916     retval = qmp_query_spice(errp);
917     if (!error_is_set(errp)) {
918         qmp_marshal_output_query_spice(retval, ret, errp);
919     }
920 
921 out:
922 
923 
924     if (local_err) {
925         qerror_report_err(local_err);
926         error_free(local_err);
927         return -1;
928     }
929     return 0;
930 }
931 
qmp_marshal_output_query_balloon(BalloonInfo * ret_in,QObject ** ret_out,Error ** errp)932 static void qmp_marshal_output_query_balloon(BalloonInfo * ret_in, QObject **ret_out, Error **errp)
933 {
934     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
935     QmpOutputVisitor *mo = qmp_output_visitor_new();
936     Visitor *v;
937 
938     v = qmp_output_get_visitor(mo);
939     visit_type_BalloonInfo(v, &ret_in, "unused", errp);
940     if (!error_is_set(errp)) {
941         *ret_out = qmp_output_get_qobject(mo);
942     }
943     qmp_output_visitor_cleanup(mo);
944     v = qapi_dealloc_get_visitor(md);
945     visit_type_BalloonInfo(v, &ret_in, "unused", NULL);
946     qapi_dealloc_visitor_cleanup(md);
947 }
948 
qmp_marshal_input_query_balloon(Monitor * mon,const QDict * qdict,QObject ** ret)949 int qmp_marshal_input_query_balloon(Monitor *mon, const QDict *qdict, QObject **ret)
950 {
951     Error *local_err = NULL;
952     Error **errp = &local_err;
953     QDict *args = (QDict *)qdict;
954     BalloonInfo * retval = NULL;
955     (void)args;
956     if (error_is_set(errp)) {
957         goto out;
958     }
959     retval = qmp_query_balloon(errp);
960     if (!error_is_set(errp)) {
961         qmp_marshal_output_query_balloon(retval, ret, errp);
962     }
963 
964 out:
965 
966 
967     if (local_err) {
968         qerror_report_err(local_err);
969         error_free(local_err);
970         return -1;
971     }
972     return 0;
973 }
974 
qmp_marshal_output_query_pci(PciInfoList * ret_in,QObject ** ret_out,Error ** errp)975 static void qmp_marshal_output_query_pci(PciInfoList * ret_in, QObject **ret_out, Error **errp)
976 {
977     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
978     QmpOutputVisitor *mo = qmp_output_visitor_new();
979     Visitor *v;
980 
981     v = qmp_output_get_visitor(mo);
982     visit_type_PciInfoList(v, &ret_in, "unused", errp);
983     if (!error_is_set(errp)) {
984         *ret_out = qmp_output_get_qobject(mo);
985     }
986     qmp_output_visitor_cleanup(mo);
987     v = qapi_dealloc_get_visitor(md);
988     visit_type_PciInfoList(v, &ret_in, "unused", NULL);
989     qapi_dealloc_visitor_cleanup(md);
990 }
991 
qmp_marshal_input_query_pci(Monitor * mon,const QDict * qdict,QObject ** ret)992 int qmp_marshal_input_query_pci(Monitor *mon, const QDict *qdict, QObject **ret)
993 {
994     Error *local_err = NULL;
995     Error **errp = &local_err;
996     QDict *args = (QDict *)qdict;
997     PciInfoList * retval = NULL;
998     (void)args;
999     if (error_is_set(errp)) {
1000         goto out;
1001     }
1002     retval = qmp_query_pci(errp);
1003     if (!error_is_set(errp)) {
1004         qmp_marshal_output_query_pci(retval, ret, errp);
1005     }
1006 
1007 out:
1008 
1009 
1010     if (local_err) {
1011         qerror_report_err(local_err);
1012         error_free(local_err);
1013         return -1;
1014     }
1015     return 0;
1016 }
1017 
qmp_marshal_output_query_block_jobs(BlockJobInfoList * ret_in,QObject ** ret_out,Error ** errp)1018 static void qmp_marshal_output_query_block_jobs(BlockJobInfoList * ret_in, QObject **ret_out, Error **errp)
1019 {
1020     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
1021     QmpOutputVisitor *mo = qmp_output_visitor_new();
1022     Visitor *v;
1023 
1024     v = qmp_output_get_visitor(mo);
1025     visit_type_BlockJobInfoList(v, &ret_in, "unused", errp);
1026     if (!error_is_set(errp)) {
1027         *ret_out = qmp_output_get_qobject(mo);
1028     }
1029     qmp_output_visitor_cleanup(mo);
1030     v = qapi_dealloc_get_visitor(md);
1031     visit_type_BlockJobInfoList(v, &ret_in, "unused", NULL);
1032     qapi_dealloc_visitor_cleanup(md);
1033 }
1034 
qmp_marshal_input_query_block_jobs(Monitor * mon,const QDict * qdict,QObject ** ret)1035 int qmp_marshal_input_query_block_jobs(Monitor *mon, const QDict *qdict, QObject **ret)
1036 {
1037     Error *local_err = NULL;
1038     Error **errp = &local_err;
1039     QDict *args = (QDict *)qdict;
1040     BlockJobInfoList * retval = NULL;
1041     (void)args;
1042     if (error_is_set(errp)) {
1043         goto out;
1044     }
1045     retval = qmp_query_block_jobs(errp);
1046     if (!error_is_set(errp)) {
1047         qmp_marshal_output_query_block_jobs(retval, ret, errp);
1048     }
1049 
1050 out:
1051 
1052 
1053     if (local_err) {
1054         qerror_report_err(local_err);
1055         error_free(local_err);
1056         return -1;
1057     }
1058     return 0;
1059 }
1060 
qmp_marshal_input_quit(Monitor * mon,const QDict * qdict,QObject ** ret)1061 int qmp_marshal_input_quit(Monitor *mon, const QDict *qdict, QObject **ret)
1062 {
1063     Error *local_err = NULL;
1064     Error **errp = &local_err;
1065     QDict *args = (QDict *)qdict;
1066     (void)args;
1067     if (error_is_set(errp)) {
1068         goto out;
1069     }
1070     qmp_quit(errp);
1071 
1072 out:
1073 
1074 
1075     if (local_err) {
1076         qerror_report_err(local_err);
1077         error_free(local_err);
1078         return -1;
1079     }
1080     return 0;
1081 }
1082 
qmp_marshal_input_stop(Monitor * mon,const QDict * qdict,QObject ** ret)1083 int qmp_marshal_input_stop(Monitor *mon, const QDict *qdict, QObject **ret)
1084 {
1085     Error *local_err = NULL;
1086     Error **errp = &local_err;
1087     QDict *args = (QDict *)qdict;
1088     (void)args;
1089     if (error_is_set(errp)) {
1090         goto out;
1091     }
1092     qmp_stop(errp);
1093 
1094 out:
1095 
1096 
1097     if (local_err) {
1098         qerror_report_err(local_err);
1099         error_free(local_err);
1100         return -1;
1101     }
1102     return 0;
1103 }
1104 
qmp_marshal_input_system_reset(Monitor * mon,const QDict * qdict,QObject ** ret)1105 int qmp_marshal_input_system_reset(Monitor *mon, const QDict *qdict, QObject **ret)
1106 {
1107     Error *local_err = NULL;
1108     Error **errp = &local_err;
1109     QDict *args = (QDict *)qdict;
1110     (void)args;
1111     if (error_is_set(errp)) {
1112         goto out;
1113     }
1114     qmp_system_reset(errp);
1115 
1116 out:
1117 
1118 
1119     if (local_err) {
1120         qerror_report_err(local_err);
1121         error_free(local_err);
1122         return -1;
1123     }
1124     return 0;
1125 }
1126 
qmp_marshal_input_system_powerdown(Monitor * mon,const QDict * qdict,QObject ** ret)1127 int qmp_marshal_input_system_powerdown(Monitor *mon, const QDict *qdict, QObject **ret)
1128 {
1129     Error *local_err = NULL;
1130     Error **errp = &local_err;
1131     QDict *args = (QDict *)qdict;
1132     (void)args;
1133     if (error_is_set(errp)) {
1134         goto out;
1135     }
1136     qmp_system_powerdown(errp);
1137 
1138 out:
1139 
1140 
1141     if (local_err) {
1142         qerror_report_err(local_err);
1143         error_free(local_err);
1144         return -1;
1145     }
1146     return 0;
1147 }
1148 
qmp_marshal_input_cpu(Monitor * mon,const QDict * qdict,QObject ** ret)1149 int qmp_marshal_input_cpu(Monitor *mon, const QDict *qdict, QObject **ret)
1150 {
1151     Error *local_err = NULL;
1152     Error **errp = &local_err;
1153     QDict *args = (QDict *)qdict;
1154     QmpInputVisitor *mi;
1155     QapiDeallocVisitor *md;
1156     Visitor *v;
1157     int64_t index;
1158 
1159     mi = qmp_input_visitor_new_strict(QOBJECT(args));
1160     v = qmp_input_get_visitor(mi);
1161     visit_type_int(v, &index, "index", errp);
1162     qmp_input_visitor_cleanup(mi);
1163 
1164     if (error_is_set(errp)) {
1165         goto out;
1166     }
1167     qmp_cpu(index, errp);
1168 
1169 out:
1170     md = qapi_dealloc_visitor_new();
1171     v = qapi_dealloc_get_visitor(md);
1172     visit_type_int(v, &index, "index", NULL);
1173     qapi_dealloc_visitor_cleanup(md);
1174 
1175     if (local_err) {
1176         qerror_report_err(local_err);
1177         error_free(local_err);
1178         return -1;
1179     }
1180     return 0;
1181 }
1182 
qmp_marshal_input_cpu_add(Monitor * mon,const QDict * qdict,QObject ** ret)1183 int qmp_marshal_input_cpu_add(Monitor *mon, const QDict *qdict, QObject **ret)
1184 {
1185     Error *local_err = NULL;
1186     Error **errp = &local_err;
1187     QDict *args = (QDict *)qdict;
1188     QmpInputVisitor *mi;
1189     QapiDeallocVisitor *md;
1190     Visitor *v;
1191     int64_t id;
1192 
1193     mi = qmp_input_visitor_new_strict(QOBJECT(args));
1194     v = qmp_input_get_visitor(mi);
1195     visit_type_int(v, &id, "id", errp);
1196     qmp_input_visitor_cleanup(mi);
1197 
1198     if (error_is_set(errp)) {
1199         goto out;
1200     }
1201     qmp_cpu_add(id, errp);
1202 
1203 out:
1204     md = qapi_dealloc_visitor_new();
1205     v = qapi_dealloc_get_visitor(md);
1206     visit_type_int(v, &id, "id", NULL);
1207     qapi_dealloc_visitor_cleanup(md);
1208 
1209     if (local_err) {
1210         qerror_report_err(local_err);
1211         error_free(local_err);
1212         return -1;
1213     }
1214     return 0;
1215 }
1216 
qmp_marshal_input_memsave(Monitor * mon,const QDict * qdict,QObject ** ret)1217 int qmp_marshal_input_memsave(Monitor *mon, const QDict *qdict, QObject **ret)
1218 {
1219     Error *local_err = NULL;
1220     Error **errp = &local_err;
1221     QDict *args = (QDict *)qdict;
1222     QmpInputVisitor *mi;
1223     QapiDeallocVisitor *md;
1224     Visitor *v;
1225     int64_t val;
1226     int64_t size;
1227     char * filename = NULL;
1228     bool has_cpu_index = false;
1229     int64_t cpu_index;
1230 
1231     mi = qmp_input_visitor_new_strict(QOBJECT(args));
1232     v = qmp_input_get_visitor(mi);
1233     visit_type_int(v, &val, "val", errp);
1234     visit_type_int(v, &size, "size", errp);
1235     visit_type_str(v, &filename, "filename", errp);
1236     visit_start_optional(v, &has_cpu_index, "cpu-index", errp);
1237     if (has_cpu_index) {
1238         visit_type_int(v, &cpu_index, "cpu-index", errp);
1239     }
1240     visit_end_optional(v, errp);
1241     qmp_input_visitor_cleanup(mi);
1242 
1243     if (error_is_set(errp)) {
1244         goto out;
1245     }
1246     qmp_memsave(val, size, filename, has_cpu_index, cpu_index, errp);
1247 
1248 out:
1249     md = qapi_dealloc_visitor_new();
1250     v = qapi_dealloc_get_visitor(md);
1251     visit_type_int(v, &val, "val", NULL);
1252     visit_type_int(v, &size, "size", NULL);
1253     visit_type_str(v, &filename, "filename", NULL);
1254     visit_start_optional(v, &has_cpu_index, "cpu-index", NULL);
1255     if (has_cpu_index) {
1256         visit_type_int(v, &cpu_index, "cpu-index", NULL);
1257     }
1258     visit_end_optional(v, NULL);
1259     qapi_dealloc_visitor_cleanup(md);
1260 
1261     if (local_err) {
1262         qerror_report_err(local_err);
1263         error_free(local_err);
1264         return -1;
1265     }
1266     return 0;
1267 }
1268 
qmp_marshal_input_pmemsave(Monitor * mon,const QDict * qdict,QObject ** ret)1269 int qmp_marshal_input_pmemsave(Monitor *mon, const QDict *qdict, QObject **ret)
1270 {
1271     Error *local_err = NULL;
1272     Error **errp = &local_err;
1273     QDict *args = (QDict *)qdict;
1274     QmpInputVisitor *mi;
1275     QapiDeallocVisitor *md;
1276     Visitor *v;
1277     int64_t val;
1278     int64_t size;
1279     char * filename = NULL;
1280 
1281     mi = qmp_input_visitor_new_strict(QOBJECT(args));
1282     v = qmp_input_get_visitor(mi);
1283     visit_type_int(v, &val, "val", errp);
1284     visit_type_int(v, &size, "size", errp);
1285     visit_type_str(v, &filename, "filename", errp);
1286     qmp_input_visitor_cleanup(mi);
1287 
1288     if (error_is_set(errp)) {
1289         goto out;
1290     }
1291     qmp_pmemsave(val, size, filename, errp);
1292 
1293 out:
1294     md = qapi_dealloc_visitor_new();
1295     v = qapi_dealloc_get_visitor(md);
1296     visit_type_int(v, &val, "val", NULL);
1297     visit_type_int(v, &size, "size", NULL);
1298     visit_type_str(v, &filename, "filename", NULL);
1299     qapi_dealloc_visitor_cleanup(md);
1300 
1301     if (local_err) {
1302         qerror_report_err(local_err);
1303         error_free(local_err);
1304         return -1;
1305     }
1306     return 0;
1307 }
1308 
qmp_marshal_input_cont(Monitor * mon,const QDict * qdict,QObject ** ret)1309 int qmp_marshal_input_cont(Monitor *mon, const QDict *qdict, QObject **ret)
1310 {
1311     Error *local_err = NULL;
1312     Error **errp = &local_err;
1313     QDict *args = (QDict *)qdict;
1314     (void)args;
1315     if (error_is_set(errp)) {
1316         goto out;
1317     }
1318     qmp_cont(errp);
1319 
1320 out:
1321 
1322 
1323     if (local_err) {
1324         qerror_report_err(local_err);
1325         error_free(local_err);
1326         return -1;
1327     }
1328     return 0;
1329 }
1330 
qmp_marshal_input_system_wakeup(Monitor * mon,const QDict * qdict,QObject ** ret)1331 int qmp_marshal_input_system_wakeup(Monitor *mon, const QDict *qdict, QObject **ret)
1332 {
1333     Error *local_err = NULL;
1334     Error **errp = &local_err;
1335     QDict *args = (QDict *)qdict;
1336     (void)args;
1337     if (error_is_set(errp)) {
1338         goto out;
1339     }
1340     qmp_system_wakeup(errp);
1341 
1342 out:
1343 
1344 
1345     if (local_err) {
1346         qerror_report_err(local_err);
1347         error_free(local_err);
1348         return -1;
1349     }
1350     return 0;
1351 }
1352 
qmp_marshal_input_inject_nmi(Monitor * mon,const QDict * qdict,QObject ** ret)1353 int qmp_marshal_input_inject_nmi(Monitor *mon, const QDict *qdict, QObject **ret)
1354 {
1355     Error *local_err = NULL;
1356     Error **errp = &local_err;
1357     QDict *args = (QDict *)qdict;
1358     (void)args;
1359     if (error_is_set(errp)) {
1360         goto out;
1361     }
1362     qmp_inject_nmi(errp);
1363 
1364 out:
1365 
1366 
1367     if (local_err) {
1368         qerror_report_err(local_err);
1369         error_free(local_err);
1370         return -1;
1371     }
1372     return 0;
1373 }
1374 
qmp_marshal_input_set_link(Monitor * mon,const QDict * qdict,QObject ** ret)1375 int qmp_marshal_input_set_link(Monitor *mon, const QDict *qdict, QObject **ret)
1376 {
1377     Error *local_err = NULL;
1378     Error **errp = &local_err;
1379     QDict *args = (QDict *)qdict;
1380     QmpInputVisitor *mi;
1381     QapiDeallocVisitor *md;
1382     Visitor *v;
1383     char * name = NULL;
1384     bool up;
1385 
1386     mi = qmp_input_visitor_new_strict(QOBJECT(args));
1387     v = qmp_input_get_visitor(mi);
1388     visit_type_str(v, &name, "name", errp);
1389     visit_type_bool(v, &up, "up", errp);
1390     qmp_input_visitor_cleanup(mi);
1391 
1392     if (error_is_set(errp)) {
1393         goto out;
1394     }
1395     qmp_set_link(name, up, errp);
1396 
1397 out:
1398     md = qapi_dealloc_visitor_new();
1399     v = qapi_dealloc_get_visitor(md);
1400     visit_type_str(v, &name, "name", NULL);
1401     visit_type_bool(v, &up, "up", NULL);
1402     qapi_dealloc_visitor_cleanup(md);
1403 
1404     if (local_err) {
1405         qerror_report_err(local_err);
1406         error_free(local_err);
1407         return -1;
1408     }
1409     return 0;
1410 }
1411 
qmp_marshal_input_block_passwd(Monitor * mon,const QDict * qdict,QObject ** ret)1412 int qmp_marshal_input_block_passwd(Monitor *mon, const QDict *qdict, QObject **ret)
1413 {
1414     Error *local_err = NULL;
1415     Error **errp = &local_err;
1416     QDict *args = (QDict *)qdict;
1417     QmpInputVisitor *mi;
1418     QapiDeallocVisitor *md;
1419     Visitor *v;
1420     char * device = NULL;
1421     char * password = NULL;
1422 
1423     mi = qmp_input_visitor_new_strict(QOBJECT(args));
1424     v = qmp_input_get_visitor(mi);
1425     visit_type_str(v, &device, "device", errp);
1426     visit_type_str(v, &password, "password", errp);
1427     qmp_input_visitor_cleanup(mi);
1428 
1429     if (error_is_set(errp)) {
1430         goto out;
1431     }
1432     qmp_block_passwd(device, password, errp);
1433 
1434 out:
1435     md = qapi_dealloc_visitor_new();
1436     v = qapi_dealloc_get_visitor(md);
1437     visit_type_str(v, &device, "device", NULL);
1438     visit_type_str(v, &password, "password", NULL);
1439     qapi_dealloc_visitor_cleanup(md);
1440 
1441     if (local_err) {
1442         qerror_report_err(local_err);
1443         error_free(local_err);
1444         return -1;
1445     }
1446     return 0;
1447 }
1448 
qmp_marshal_input_balloon(Monitor * mon,const QDict * qdict,QObject ** ret)1449 int qmp_marshal_input_balloon(Monitor *mon, const QDict *qdict, QObject **ret)
1450 {
1451     Error *local_err = NULL;
1452     Error **errp = &local_err;
1453     QDict *args = (QDict *)qdict;
1454     QmpInputVisitor *mi;
1455     QapiDeallocVisitor *md;
1456     Visitor *v;
1457     int64_t value;
1458 
1459     mi = qmp_input_visitor_new_strict(QOBJECT(args));
1460     v = qmp_input_get_visitor(mi);
1461     visit_type_int(v, &value, "value", errp);
1462     qmp_input_visitor_cleanup(mi);
1463 
1464     if (error_is_set(errp)) {
1465         goto out;
1466     }
1467     qmp_balloon(value, errp);
1468 
1469 out:
1470     md = qapi_dealloc_visitor_new();
1471     v = qapi_dealloc_get_visitor(md);
1472     visit_type_int(v, &value, "value", NULL);
1473     qapi_dealloc_visitor_cleanup(md);
1474 
1475     if (local_err) {
1476         qerror_report_err(local_err);
1477         error_free(local_err);
1478         return -1;
1479     }
1480     return 0;
1481 }
1482 
qmp_marshal_input_block_resize(Monitor * mon,const QDict * qdict,QObject ** ret)1483 int qmp_marshal_input_block_resize(Monitor *mon, const QDict *qdict, QObject **ret)
1484 {
1485     Error *local_err = NULL;
1486     Error **errp = &local_err;
1487     QDict *args = (QDict *)qdict;
1488     QmpInputVisitor *mi;
1489     QapiDeallocVisitor *md;
1490     Visitor *v;
1491     char * device = NULL;
1492     int64_t size;
1493 
1494     mi = qmp_input_visitor_new_strict(QOBJECT(args));
1495     v = qmp_input_get_visitor(mi);
1496     visit_type_str(v, &device, "device", errp);
1497     visit_type_int(v, &size, "size", errp);
1498     qmp_input_visitor_cleanup(mi);
1499 
1500     if (error_is_set(errp)) {
1501         goto out;
1502     }
1503     qmp_block_resize(device, size, errp);
1504 
1505 out:
1506     md = qapi_dealloc_visitor_new();
1507     v = qapi_dealloc_get_visitor(md);
1508     visit_type_str(v, &device, "device", NULL);
1509     visit_type_int(v, &size, "size", NULL);
1510     qapi_dealloc_visitor_cleanup(md);
1511 
1512     if (local_err) {
1513         qerror_report_err(local_err);
1514         error_free(local_err);
1515         return -1;
1516     }
1517     return 0;
1518 }
1519 
qmp_marshal_input_transaction(Monitor * mon,const QDict * qdict,QObject ** ret)1520 int qmp_marshal_input_transaction(Monitor *mon, const QDict *qdict, QObject **ret)
1521 {
1522     Error *local_err = NULL;
1523     Error **errp = &local_err;
1524     QDict *args = (QDict *)qdict;
1525     QmpInputVisitor *mi;
1526     QapiDeallocVisitor *md;
1527     Visitor *v;
1528     TransactionActionList * actions = NULL;
1529 
1530     mi = qmp_input_visitor_new_strict(QOBJECT(args));
1531     v = qmp_input_get_visitor(mi);
1532     visit_type_TransactionActionList(v, &actions, "actions", errp);
1533     qmp_input_visitor_cleanup(mi);
1534 
1535     if (error_is_set(errp)) {
1536         goto out;
1537     }
1538     qmp_transaction(actions, errp);
1539 
1540 out:
1541     md = qapi_dealloc_visitor_new();
1542     v = qapi_dealloc_get_visitor(md);
1543     visit_type_TransactionActionList(v, &actions, "actions", NULL);
1544     qapi_dealloc_visitor_cleanup(md);
1545 
1546     if (local_err) {
1547         qerror_report_err(local_err);
1548         error_free(local_err);
1549         return -1;
1550     }
1551     return 0;
1552 }
1553 
qmp_marshal_input_blockdev_snapshot_sync(Monitor * mon,const QDict * qdict,QObject ** ret)1554 int qmp_marshal_input_blockdev_snapshot_sync(Monitor *mon, const QDict *qdict, QObject **ret)
1555 {
1556     Error *local_err = NULL;
1557     Error **errp = &local_err;
1558     QDict *args = (QDict *)qdict;
1559     QmpInputVisitor *mi;
1560     QapiDeallocVisitor *md;
1561     Visitor *v;
1562     char * device = NULL;
1563     char * snapshot_file = NULL;
1564     bool has_format = false;
1565     char * format = NULL;
1566     bool has_mode = false;
1567     NewImageMode mode;
1568 
1569     mi = qmp_input_visitor_new_strict(QOBJECT(args));
1570     v = qmp_input_get_visitor(mi);
1571     visit_type_str(v, &device, "device", errp);
1572     visit_type_str(v, &snapshot_file, "snapshot-file", errp);
1573     visit_start_optional(v, &has_format, "format", errp);
1574     if (has_format) {
1575         visit_type_str(v, &format, "format", errp);
1576     }
1577     visit_end_optional(v, errp);
1578     visit_start_optional(v, &has_mode, "mode", errp);
1579     if (has_mode) {
1580         visit_type_NewImageMode(v, &mode, "mode", errp);
1581     }
1582     visit_end_optional(v, errp);
1583     qmp_input_visitor_cleanup(mi);
1584 
1585     if (error_is_set(errp)) {
1586         goto out;
1587     }
1588     qmp_blockdev_snapshot_sync(device, snapshot_file, has_format, format, has_mode, mode, errp);
1589 
1590 out:
1591     md = qapi_dealloc_visitor_new();
1592     v = qapi_dealloc_get_visitor(md);
1593     visit_type_str(v, &device, "device", NULL);
1594     visit_type_str(v, &snapshot_file, "snapshot-file", NULL);
1595     visit_start_optional(v, &has_format, "format", NULL);
1596     if (has_format) {
1597         visit_type_str(v, &format, "format", NULL);
1598     }
1599     visit_end_optional(v, NULL);
1600     visit_start_optional(v, &has_mode, "mode", NULL);
1601     if (has_mode) {
1602         visit_type_NewImageMode(v, &mode, "mode", NULL);
1603     }
1604     visit_end_optional(v, NULL);
1605     qapi_dealloc_visitor_cleanup(md);
1606 
1607     if (local_err) {
1608         qerror_report_err(local_err);
1609         error_free(local_err);
1610         return -1;
1611     }
1612     return 0;
1613 }
1614 
qmp_marshal_input_blockdev_snapshot_internal_sync(Monitor * mon,const QDict * qdict,QObject ** ret)1615 int qmp_marshal_input_blockdev_snapshot_internal_sync(Monitor *mon, const QDict *qdict, QObject **ret)
1616 {
1617     Error *local_err = NULL;
1618     Error **errp = &local_err;
1619     QDict *args = (QDict *)qdict;
1620     QmpInputVisitor *mi;
1621     QapiDeallocVisitor *md;
1622     Visitor *v;
1623     char * device = NULL;
1624     char * name = NULL;
1625 
1626     mi = qmp_input_visitor_new_strict(QOBJECT(args));
1627     v = qmp_input_get_visitor(mi);
1628     visit_type_str(v, &device, "device", errp);
1629     visit_type_str(v, &name, "name", errp);
1630     qmp_input_visitor_cleanup(mi);
1631 
1632     if (error_is_set(errp)) {
1633         goto out;
1634     }
1635     qmp_blockdev_snapshot_internal_sync(device, name, errp);
1636 
1637 out:
1638     md = qapi_dealloc_visitor_new();
1639     v = qapi_dealloc_get_visitor(md);
1640     visit_type_str(v, &device, "device", NULL);
1641     visit_type_str(v, &name, "name", NULL);
1642     qapi_dealloc_visitor_cleanup(md);
1643 
1644     if (local_err) {
1645         qerror_report_err(local_err);
1646         error_free(local_err);
1647         return -1;
1648     }
1649     return 0;
1650 }
1651 
qmp_marshal_output_blockdev_snapshot_delete_internal_sync(SnapshotInfo * ret_in,QObject ** ret_out,Error ** errp)1652 static void qmp_marshal_output_blockdev_snapshot_delete_internal_sync(SnapshotInfo * ret_in, QObject **ret_out, Error **errp)
1653 {
1654     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
1655     QmpOutputVisitor *mo = qmp_output_visitor_new();
1656     Visitor *v;
1657 
1658     v = qmp_output_get_visitor(mo);
1659     visit_type_SnapshotInfo(v, &ret_in, "unused", errp);
1660     if (!error_is_set(errp)) {
1661         *ret_out = qmp_output_get_qobject(mo);
1662     }
1663     qmp_output_visitor_cleanup(mo);
1664     v = qapi_dealloc_get_visitor(md);
1665     visit_type_SnapshotInfo(v, &ret_in, "unused", NULL);
1666     qapi_dealloc_visitor_cleanup(md);
1667 }
1668 
qmp_marshal_input_blockdev_snapshot_delete_internal_sync(Monitor * mon,const QDict * qdict,QObject ** ret)1669 int qmp_marshal_input_blockdev_snapshot_delete_internal_sync(Monitor *mon, const QDict *qdict, QObject **ret)
1670 {
1671     Error *local_err = NULL;
1672     Error **errp = &local_err;
1673     QDict *args = (QDict *)qdict;
1674     SnapshotInfo * retval = NULL;
1675     QmpInputVisitor *mi;
1676     QapiDeallocVisitor *md;
1677     Visitor *v;
1678     char * device = NULL;
1679     bool has_id = false;
1680     char * id = NULL;
1681     bool has_name = false;
1682     char * name = NULL;
1683 
1684     mi = qmp_input_visitor_new_strict(QOBJECT(args));
1685     v = qmp_input_get_visitor(mi);
1686     visit_type_str(v, &device, "device", errp);
1687     visit_start_optional(v, &has_id, "id", errp);
1688     if (has_id) {
1689         visit_type_str(v, &id, "id", errp);
1690     }
1691     visit_end_optional(v, errp);
1692     visit_start_optional(v, &has_name, "name", errp);
1693     if (has_name) {
1694         visit_type_str(v, &name, "name", errp);
1695     }
1696     visit_end_optional(v, errp);
1697     qmp_input_visitor_cleanup(mi);
1698 
1699     if (error_is_set(errp)) {
1700         goto out;
1701     }
1702     retval = qmp_blockdev_snapshot_delete_internal_sync(device, has_id, id, has_name, name, errp);
1703     if (!error_is_set(errp)) {
1704         qmp_marshal_output_blockdev_snapshot_delete_internal_sync(retval, ret, errp);
1705     }
1706 
1707 out:
1708     md = qapi_dealloc_visitor_new();
1709     v = qapi_dealloc_get_visitor(md);
1710     visit_type_str(v, &device, "device", NULL);
1711     visit_start_optional(v, &has_id, "id", NULL);
1712     if (has_id) {
1713         visit_type_str(v, &id, "id", NULL);
1714     }
1715     visit_end_optional(v, NULL);
1716     visit_start_optional(v, &has_name, "name", NULL);
1717     if (has_name) {
1718         visit_type_str(v, &name, "name", NULL);
1719     }
1720     visit_end_optional(v, NULL);
1721     qapi_dealloc_visitor_cleanup(md);
1722 
1723     if (local_err) {
1724         qerror_report_err(local_err);
1725         error_free(local_err);
1726         return -1;
1727     }
1728     return 0;
1729 }
1730 
qmp_marshal_output_human_monitor_command(char * ret_in,QObject ** ret_out,Error ** errp)1731 static void qmp_marshal_output_human_monitor_command(char * ret_in, QObject **ret_out, Error **errp)
1732 {
1733     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
1734     QmpOutputVisitor *mo = qmp_output_visitor_new();
1735     Visitor *v;
1736 
1737     v = qmp_output_get_visitor(mo);
1738     visit_type_str(v, &ret_in, "unused", errp);
1739     if (!error_is_set(errp)) {
1740         *ret_out = qmp_output_get_qobject(mo);
1741     }
1742     qmp_output_visitor_cleanup(mo);
1743     v = qapi_dealloc_get_visitor(md);
1744     visit_type_str(v, &ret_in, "unused", NULL);
1745     qapi_dealloc_visitor_cleanup(md);
1746 }
1747 
qmp_marshal_input_human_monitor_command(Monitor * mon,const QDict * qdict,QObject ** ret)1748 int qmp_marshal_input_human_monitor_command(Monitor *mon, const QDict *qdict, QObject **ret)
1749 {
1750     Error *local_err = NULL;
1751     Error **errp = &local_err;
1752     QDict *args = (QDict *)qdict;
1753     char * retval = NULL;
1754     QmpInputVisitor *mi;
1755     QapiDeallocVisitor *md;
1756     Visitor *v;
1757     char * command_line = NULL;
1758     bool has_cpu_index = false;
1759     int64_t cpu_index;
1760 
1761     mi = qmp_input_visitor_new_strict(QOBJECT(args));
1762     v = qmp_input_get_visitor(mi);
1763     visit_type_str(v, &command_line, "command-line", errp);
1764     visit_start_optional(v, &has_cpu_index, "cpu-index", errp);
1765     if (has_cpu_index) {
1766         visit_type_int(v, &cpu_index, "cpu-index", errp);
1767     }
1768     visit_end_optional(v, errp);
1769     qmp_input_visitor_cleanup(mi);
1770 
1771     if (error_is_set(errp)) {
1772         goto out;
1773     }
1774     retval = qmp_human_monitor_command(command_line, has_cpu_index, cpu_index, errp);
1775     if (!error_is_set(errp)) {
1776         qmp_marshal_output_human_monitor_command(retval, ret, errp);
1777     }
1778 
1779 out:
1780     md = qapi_dealloc_visitor_new();
1781     v = qapi_dealloc_get_visitor(md);
1782     visit_type_str(v, &command_line, "command-line", NULL);
1783     visit_start_optional(v, &has_cpu_index, "cpu-index", NULL);
1784     if (has_cpu_index) {
1785         visit_type_int(v, &cpu_index, "cpu-index", NULL);
1786     }
1787     visit_end_optional(v, NULL);
1788     qapi_dealloc_visitor_cleanup(md);
1789 
1790     if (local_err) {
1791         qerror_report_err(local_err);
1792         error_free(local_err);
1793         return -1;
1794     }
1795     return 0;
1796 }
1797 
qmp_marshal_input_block_commit(Monitor * mon,const QDict * qdict,QObject ** ret)1798 int qmp_marshal_input_block_commit(Monitor *mon, const QDict *qdict, QObject **ret)
1799 {
1800     Error *local_err = NULL;
1801     Error **errp = &local_err;
1802     QDict *args = (QDict *)qdict;
1803     QmpInputVisitor *mi;
1804     QapiDeallocVisitor *md;
1805     Visitor *v;
1806     char * device = NULL;
1807     bool has_base = false;
1808     char * base = NULL;
1809     char * top = NULL;
1810     bool has_speed = false;
1811     int64_t speed;
1812 
1813     mi = qmp_input_visitor_new_strict(QOBJECT(args));
1814     v = qmp_input_get_visitor(mi);
1815     visit_type_str(v, &device, "device", errp);
1816     visit_start_optional(v, &has_base, "base", errp);
1817     if (has_base) {
1818         visit_type_str(v, &base, "base", errp);
1819     }
1820     visit_end_optional(v, errp);
1821     visit_type_str(v, &top, "top", errp);
1822     visit_start_optional(v, &has_speed, "speed", errp);
1823     if (has_speed) {
1824         visit_type_int(v, &speed, "speed", errp);
1825     }
1826     visit_end_optional(v, errp);
1827     qmp_input_visitor_cleanup(mi);
1828 
1829     if (error_is_set(errp)) {
1830         goto out;
1831     }
1832     qmp_block_commit(device, has_base, base, top, has_speed, speed, errp);
1833 
1834 out:
1835     md = qapi_dealloc_visitor_new();
1836     v = qapi_dealloc_get_visitor(md);
1837     visit_type_str(v, &device, "device", NULL);
1838     visit_start_optional(v, &has_base, "base", NULL);
1839     if (has_base) {
1840         visit_type_str(v, &base, "base", NULL);
1841     }
1842     visit_end_optional(v, NULL);
1843     visit_type_str(v, &top, "top", NULL);
1844     visit_start_optional(v, &has_speed, "speed", NULL);
1845     if (has_speed) {
1846         visit_type_int(v, &speed, "speed", NULL);
1847     }
1848     visit_end_optional(v, NULL);
1849     qapi_dealloc_visitor_cleanup(md);
1850 
1851     if (local_err) {
1852         qerror_report_err(local_err);
1853         error_free(local_err);
1854         return -1;
1855     }
1856     return 0;
1857 }
1858 
qmp_marshal_input_drive_backup(Monitor * mon,const QDict * qdict,QObject ** ret)1859 int qmp_marshal_input_drive_backup(Monitor *mon, const QDict *qdict, QObject **ret)
1860 {
1861     Error *local_err = NULL;
1862     Error **errp = &local_err;
1863     QDict *args = (QDict *)qdict;
1864     QmpInputVisitor *mi;
1865     QapiDeallocVisitor *md;
1866     Visitor *v;
1867     char * device = NULL;
1868     char * target = NULL;
1869     bool has_format = false;
1870     char * format = NULL;
1871     MirrorSyncMode sync;
1872     bool has_mode = false;
1873     NewImageMode mode;
1874     bool has_speed = false;
1875     int64_t speed;
1876     bool has_on_source_error = false;
1877     BlockdevOnError on_source_error;
1878     bool has_on_target_error = false;
1879     BlockdevOnError on_target_error;
1880 
1881     mi = qmp_input_visitor_new_strict(QOBJECT(args));
1882     v = qmp_input_get_visitor(mi);
1883     visit_type_str(v, &device, "device", errp);
1884     visit_type_str(v, &target, "target", errp);
1885     visit_start_optional(v, &has_format, "format", errp);
1886     if (has_format) {
1887         visit_type_str(v, &format, "format", errp);
1888     }
1889     visit_end_optional(v, errp);
1890     visit_type_MirrorSyncMode(v, &sync, "sync", errp);
1891     visit_start_optional(v, &has_mode, "mode", errp);
1892     if (has_mode) {
1893         visit_type_NewImageMode(v, &mode, "mode", errp);
1894     }
1895     visit_end_optional(v, errp);
1896     visit_start_optional(v, &has_speed, "speed", errp);
1897     if (has_speed) {
1898         visit_type_int(v, &speed, "speed", errp);
1899     }
1900     visit_end_optional(v, errp);
1901     visit_start_optional(v, &has_on_source_error, "on-source-error", errp);
1902     if (has_on_source_error) {
1903         visit_type_BlockdevOnError(v, &on_source_error, "on-source-error", errp);
1904     }
1905     visit_end_optional(v, errp);
1906     visit_start_optional(v, &has_on_target_error, "on-target-error", errp);
1907     if (has_on_target_error) {
1908         visit_type_BlockdevOnError(v, &on_target_error, "on-target-error", errp);
1909     }
1910     visit_end_optional(v, errp);
1911     qmp_input_visitor_cleanup(mi);
1912 
1913     if (error_is_set(errp)) {
1914         goto out;
1915     }
1916     qmp_drive_backup(device, target, has_format, format, sync, has_mode, mode, has_speed, speed, has_on_source_error, on_source_error, has_on_target_error, on_target_error, errp);
1917 
1918 out:
1919     md = qapi_dealloc_visitor_new();
1920     v = qapi_dealloc_get_visitor(md);
1921     visit_type_str(v, &device, "device", NULL);
1922     visit_type_str(v, &target, "target", NULL);
1923     visit_start_optional(v, &has_format, "format", NULL);
1924     if (has_format) {
1925         visit_type_str(v, &format, "format", NULL);
1926     }
1927     visit_end_optional(v, NULL);
1928     visit_type_MirrorSyncMode(v, &sync, "sync", NULL);
1929     visit_start_optional(v, &has_mode, "mode", NULL);
1930     if (has_mode) {
1931         visit_type_NewImageMode(v, &mode, "mode", NULL);
1932     }
1933     visit_end_optional(v, NULL);
1934     visit_start_optional(v, &has_speed, "speed", NULL);
1935     if (has_speed) {
1936         visit_type_int(v, &speed, "speed", NULL);
1937     }
1938     visit_end_optional(v, NULL);
1939     visit_start_optional(v, &has_on_source_error, "on-source-error", NULL);
1940     if (has_on_source_error) {
1941         visit_type_BlockdevOnError(v, &on_source_error, "on-source-error", NULL);
1942     }
1943     visit_end_optional(v, NULL);
1944     visit_start_optional(v, &has_on_target_error, "on-target-error", NULL);
1945     if (has_on_target_error) {
1946         visit_type_BlockdevOnError(v, &on_target_error, "on-target-error", NULL);
1947     }
1948     visit_end_optional(v, NULL);
1949     qapi_dealloc_visitor_cleanup(md);
1950 
1951     if (local_err) {
1952         qerror_report_err(local_err);
1953         error_free(local_err);
1954         return -1;
1955     }
1956     return 0;
1957 }
1958 
qmp_marshal_input_drive_mirror(Monitor * mon,const QDict * qdict,QObject ** ret)1959 int qmp_marshal_input_drive_mirror(Monitor *mon, const QDict *qdict, QObject **ret)
1960 {
1961     Error *local_err = NULL;
1962     Error **errp = &local_err;
1963     QDict *args = (QDict *)qdict;
1964     QmpInputVisitor *mi;
1965     QapiDeallocVisitor *md;
1966     Visitor *v;
1967     char * device = NULL;
1968     char * target = NULL;
1969     bool has_format = false;
1970     char * format = NULL;
1971     MirrorSyncMode sync;
1972     bool has_mode = false;
1973     NewImageMode mode;
1974     bool has_speed = false;
1975     int64_t speed;
1976     bool has_granularity = false;
1977     uint32_t granularity;
1978     bool has_buf_size = false;
1979     int64_t buf_size;
1980     bool has_on_source_error = false;
1981     BlockdevOnError on_source_error;
1982     bool has_on_target_error = false;
1983     BlockdevOnError on_target_error;
1984 
1985     mi = qmp_input_visitor_new_strict(QOBJECT(args));
1986     v = qmp_input_get_visitor(mi);
1987     visit_type_str(v, &device, "device", errp);
1988     visit_type_str(v, &target, "target", errp);
1989     visit_start_optional(v, &has_format, "format", errp);
1990     if (has_format) {
1991         visit_type_str(v, &format, "format", errp);
1992     }
1993     visit_end_optional(v, errp);
1994     visit_type_MirrorSyncMode(v, &sync, "sync", errp);
1995     visit_start_optional(v, &has_mode, "mode", errp);
1996     if (has_mode) {
1997         visit_type_NewImageMode(v, &mode, "mode", errp);
1998     }
1999     visit_end_optional(v, errp);
2000     visit_start_optional(v, &has_speed, "speed", errp);
2001     if (has_speed) {
2002         visit_type_int(v, &speed, "speed", errp);
2003     }
2004     visit_end_optional(v, errp);
2005     visit_start_optional(v, &has_granularity, "granularity", errp);
2006     if (has_granularity) {
2007         visit_type_uint32(v, &granularity, "granularity", errp);
2008     }
2009     visit_end_optional(v, errp);
2010     visit_start_optional(v, &has_buf_size, "buf-size", errp);
2011     if (has_buf_size) {
2012         visit_type_int(v, &buf_size, "buf-size", errp);
2013     }
2014     visit_end_optional(v, errp);
2015     visit_start_optional(v, &has_on_source_error, "on-source-error", errp);
2016     if (has_on_source_error) {
2017         visit_type_BlockdevOnError(v, &on_source_error, "on-source-error", errp);
2018     }
2019     visit_end_optional(v, errp);
2020     visit_start_optional(v, &has_on_target_error, "on-target-error", errp);
2021     if (has_on_target_error) {
2022         visit_type_BlockdevOnError(v, &on_target_error, "on-target-error", errp);
2023     }
2024     visit_end_optional(v, errp);
2025     qmp_input_visitor_cleanup(mi);
2026 
2027     if (error_is_set(errp)) {
2028         goto out;
2029     }
2030     qmp_drive_mirror(device, target, has_format, format, sync, has_mode, mode, has_speed, speed, has_granularity, granularity, has_buf_size, buf_size, has_on_source_error, on_source_error, has_on_target_error, on_target_error, errp);
2031 
2032 out:
2033     md = qapi_dealloc_visitor_new();
2034     v = qapi_dealloc_get_visitor(md);
2035     visit_type_str(v, &device, "device", NULL);
2036     visit_type_str(v, &target, "target", NULL);
2037     visit_start_optional(v, &has_format, "format", NULL);
2038     if (has_format) {
2039         visit_type_str(v, &format, "format", NULL);
2040     }
2041     visit_end_optional(v, NULL);
2042     visit_type_MirrorSyncMode(v, &sync, "sync", NULL);
2043     visit_start_optional(v, &has_mode, "mode", NULL);
2044     if (has_mode) {
2045         visit_type_NewImageMode(v, &mode, "mode", NULL);
2046     }
2047     visit_end_optional(v, NULL);
2048     visit_start_optional(v, &has_speed, "speed", NULL);
2049     if (has_speed) {
2050         visit_type_int(v, &speed, "speed", NULL);
2051     }
2052     visit_end_optional(v, NULL);
2053     visit_start_optional(v, &has_granularity, "granularity", NULL);
2054     if (has_granularity) {
2055         visit_type_uint32(v, &granularity, "granularity", NULL);
2056     }
2057     visit_end_optional(v, NULL);
2058     visit_start_optional(v, &has_buf_size, "buf-size", NULL);
2059     if (has_buf_size) {
2060         visit_type_int(v, &buf_size, "buf-size", NULL);
2061     }
2062     visit_end_optional(v, NULL);
2063     visit_start_optional(v, &has_on_source_error, "on-source-error", NULL);
2064     if (has_on_source_error) {
2065         visit_type_BlockdevOnError(v, &on_source_error, "on-source-error", NULL);
2066     }
2067     visit_end_optional(v, NULL);
2068     visit_start_optional(v, &has_on_target_error, "on-target-error", NULL);
2069     if (has_on_target_error) {
2070         visit_type_BlockdevOnError(v, &on_target_error, "on-target-error", NULL);
2071     }
2072     visit_end_optional(v, NULL);
2073     qapi_dealloc_visitor_cleanup(md);
2074 
2075     if (local_err) {
2076         qerror_report_err(local_err);
2077         error_free(local_err);
2078         return -1;
2079     }
2080     return 0;
2081 }
2082 
qmp_marshal_input_migrate_cancel(Monitor * mon,const QDict * qdict,QObject ** ret)2083 int qmp_marshal_input_migrate_cancel(Monitor *mon, const QDict *qdict, QObject **ret)
2084 {
2085     Error *local_err = NULL;
2086     Error **errp = &local_err;
2087     QDict *args = (QDict *)qdict;
2088     (void)args;
2089     if (error_is_set(errp)) {
2090         goto out;
2091     }
2092     qmp_migrate_cancel(errp);
2093 
2094 out:
2095 
2096 
2097     if (local_err) {
2098         qerror_report_err(local_err);
2099         error_free(local_err);
2100         return -1;
2101     }
2102     return 0;
2103 }
2104 
qmp_marshal_input_migrate_set_downtime(Monitor * mon,const QDict * qdict,QObject ** ret)2105 int qmp_marshal_input_migrate_set_downtime(Monitor *mon, const QDict *qdict, QObject **ret)
2106 {
2107     Error *local_err = NULL;
2108     Error **errp = &local_err;
2109     QDict *args = (QDict *)qdict;
2110     QmpInputVisitor *mi;
2111     QapiDeallocVisitor *md;
2112     Visitor *v;
2113     double value;
2114 
2115     mi = qmp_input_visitor_new_strict(QOBJECT(args));
2116     v = qmp_input_get_visitor(mi);
2117     visit_type_number(v, &value, "value", errp);
2118     qmp_input_visitor_cleanup(mi);
2119 
2120     if (error_is_set(errp)) {
2121         goto out;
2122     }
2123     qmp_migrate_set_downtime(value, errp);
2124 
2125 out:
2126     md = qapi_dealloc_visitor_new();
2127     v = qapi_dealloc_get_visitor(md);
2128     visit_type_number(v, &value, "value", NULL);
2129     qapi_dealloc_visitor_cleanup(md);
2130 
2131     if (local_err) {
2132         qerror_report_err(local_err);
2133         error_free(local_err);
2134         return -1;
2135     }
2136     return 0;
2137 }
2138 
qmp_marshal_input_migrate_set_speed(Monitor * mon,const QDict * qdict,QObject ** ret)2139 int qmp_marshal_input_migrate_set_speed(Monitor *mon, const QDict *qdict, QObject **ret)
2140 {
2141     Error *local_err = NULL;
2142     Error **errp = &local_err;
2143     QDict *args = (QDict *)qdict;
2144     QmpInputVisitor *mi;
2145     QapiDeallocVisitor *md;
2146     Visitor *v;
2147     int64_t value;
2148 
2149     mi = qmp_input_visitor_new_strict(QOBJECT(args));
2150     v = qmp_input_get_visitor(mi);
2151     visit_type_int(v, &value, "value", errp);
2152     qmp_input_visitor_cleanup(mi);
2153 
2154     if (error_is_set(errp)) {
2155         goto out;
2156     }
2157     qmp_migrate_set_speed(value, errp);
2158 
2159 out:
2160     md = qapi_dealloc_visitor_new();
2161     v = qapi_dealloc_get_visitor(md);
2162     visit_type_int(v, &value, "value", NULL);
2163     qapi_dealloc_visitor_cleanup(md);
2164 
2165     if (local_err) {
2166         qerror_report_err(local_err);
2167         error_free(local_err);
2168         return -1;
2169     }
2170     return 0;
2171 }
2172 
qmp_marshal_input_migrate_set_cache_size(Monitor * mon,const QDict * qdict,QObject ** ret)2173 int qmp_marshal_input_migrate_set_cache_size(Monitor *mon, const QDict *qdict, QObject **ret)
2174 {
2175     Error *local_err = NULL;
2176     Error **errp = &local_err;
2177     QDict *args = (QDict *)qdict;
2178     QmpInputVisitor *mi;
2179     QapiDeallocVisitor *md;
2180     Visitor *v;
2181     int64_t value;
2182 
2183     mi = qmp_input_visitor_new_strict(QOBJECT(args));
2184     v = qmp_input_get_visitor(mi);
2185     visit_type_int(v, &value, "value", errp);
2186     qmp_input_visitor_cleanup(mi);
2187 
2188     if (error_is_set(errp)) {
2189         goto out;
2190     }
2191     qmp_migrate_set_cache_size(value, errp);
2192 
2193 out:
2194     md = qapi_dealloc_visitor_new();
2195     v = qapi_dealloc_get_visitor(md);
2196     visit_type_int(v, &value, "value", NULL);
2197     qapi_dealloc_visitor_cleanup(md);
2198 
2199     if (local_err) {
2200         qerror_report_err(local_err);
2201         error_free(local_err);
2202         return -1;
2203     }
2204     return 0;
2205 }
2206 
qmp_marshal_output_query_migrate_cache_size(int64_t ret_in,QObject ** ret_out,Error ** errp)2207 static void qmp_marshal_output_query_migrate_cache_size(int64_t ret_in, QObject **ret_out, Error **errp)
2208 {
2209     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
2210     QmpOutputVisitor *mo = qmp_output_visitor_new();
2211     Visitor *v;
2212 
2213     v = qmp_output_get_visitor(mo);
2214     visit_type_int(v, &ret_in, "unused", errp);
2215     if (!error_is_set(errp)) {
2216         *ret_out = qmp_output_get_qobject(mo);
2217     }
2218     qmp_output_visitor_cleanup(mo);
2219     v = qapi_dealloc_get_visitor(md);
2220     visit_type_int(v, &ret_in, "unused", NULL);
2221     qapi_dealloc_visitor_cleanup(md);
2222 }
2223 
qmp_marshal_input_query_migrate_cache_size(Monitor * mon,const QDict * qdict,QObject ** ret)2224 int qmp_marshal_input_query_migrate_cache_size(Monitor *mon, const QDict *qdict, QObject **ret)
2225 {
2226     Error *local_err = NULL;
2227     Error **errp = &local_err;
2228     QDict *args = (QDict *)qdict;
2229     int64_t retval;
2230     (void)args;
2231     if (error_is_set(errp)) {
2232         goto out;
2233     }
2234     retval = qmp_query_migrate_cache_size(errp);
2235     if (!error_is_set(errp)) {
2236         qmp_marshal_output_query_migrate_cache_size(retval, ret, errp);
2237     }
2238 
2239 out:
2240 
2241 
2242     if (local_err) {
2243         qerror_report_err(local_err);
2244         error_free(local_err);
2245         return -1;
2246     }
2247     return 0;
2248 }
2249 
qmp_marshal_output_qom_list(ObjectPropertyInfoList * ret_in,QObject ** ret_out,Error ** errp)2250 static void qmp_marshal_output_qom_list(ObjectPropertyInfoList * ret_in, QObject **ret_out, Error **errp)
2251 {
2252     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
2253     QmpOutputVisitor *mo = qmp_output_visitor_new();
2254     Visitor *v;
2255 
2256     v = qmp_output_get_visitor(mo);
2257     visit_type_ObjectPropertyInfoList(v, &ret_in, "unused", errp);
2258     if (!error_is_set(errp)) {
2259         *ret_out = qmp_output_get_qobject(mo);
2260     }
2261     qmp_output_visitor_cleanup(mo);
2262     v = qapi_dealloc_get_visitor(md);
2263     visit_type_ObjectPropertyInfoList(v, &ret_in, "unused", NULL);
2264     qapi_dealloc_visitor_cleanup(md);
2265 }
2266 
qmp_marshal_input_qom_list(Monitor * mon,const QDict * qdict,QObject ** ret)2267 int qmp_marshal_input_qom_list(Monitor *mon, const QDict *qdict, QObject **ret)
2268 {
2269     Error *local_err = NULL;
2270     Error **errp = &local_err;
2271     QDict *args = (QDict *)qdict;
2272     ObjectPropertyInfoList * retval = NULL;
2273     QmpInputVisitor *mi;
2274     QapiDeallocVisitor *md;
2275     Visitor *v;
2276     char * path = NULL;
2277 
2278     mi = qmp_input_visitor_new_strict(QOBJECT(args));
2279     v = qmp_input_get_visitor(mi);
2280     visit_type_str(v, &path, "path", errp);
2281     qmp_input_visitor_cleanup(mi);
2282 
2283     if (error_is_set(errp)) {
2284         goto out;
2285     }
2286     retval = qmp_qom_list(path, errp);
2287     if (!error_is_set(errp)) {
2288         qmp_marshal_output_qom_list(retval, ret, errp);
2289     }
2290 
2291 out:
2292     md = qapi_dealloc_visitor_new();
2293     v = qapi_dealloc_get_visitor(md);
2294     visit_type_str(v, &path, "path", NULL);
2295     qapi_dealloc_visitor_cleanup(md);
2296 
2297     if (local_err) {
2298         qerror_report_err(local_err);
2299         error_free(local_err);
2300         return -1;
2301     }
2302     return 0;
2303 }
2304 
qmp_marshal_input_set_password(Monitor * mon,const QDict * qdict,QObject ** ret)2305 int qmp_marshal_input_set_password(Monitor *mon, const QDict *qdict, QObject **ret)
2306 {
2307     Error *local_err = NULL;
2308     Error **errp = &local_err;
2309     QDict *args = (QDict *)qdict;
2310     QmpInputVisitor *mi;
2311     QapiDeallocVisitor *md;
2312     Visitor *v;
2313     char * protocol = NULL;
2314     char * password = NULL;
2315     bool has_connected = false;
2316     char * connected = NULL;
2317 
2318     mi = qmp_input_visitor_new_strict(QOBJECT(args));
2319     v = qmp_input_get_visitor(mi);
2320     visit_type_str(v, &protocol, "protocol", errp);
2321     visit_type_str(v, &password, "password", errp);
2322     visit_start_optional(v, &has_connected, "connected", errp);
2323     if (has_connected) {
2324         visit_type_str(v, &connected, "connected", errp);
2325     }
2326     visit_end_optional(v, errp);
2327     qmp_input_visitor_cleanup(mi);
2328 
2329     if (error_is_set(errp)) {
2330         goto out;
2331     }
2332     qmp_set_password(protocol, password, has_connected, connected, errp);
2333 
2334 out:
2335     md = qapi_dealloc_visitor_new();
2336     v = qapi_dealloc_get_visitor(md);
2337     visit_type_str(v, &protocol, "protocol", NULL);
2338     visit_type_str(v, &password, "password", NULL);
2339     visit_start_optional(v, &has_connected, "connected", NULL);
2340     if (has_connected) {
2341         visit_type_str(v, &connected, "connected", NULL);
2342     }
2343     visit_end_optional(v, NULL);
2344     qapi_dealloc_visitor_cleanup(md);
2345 
2346     if (local_err) {
2347         qerror_report_err(local_err);
2348         error_free(local_err);
2349         return -1;
2350     }
2351     return 0;
2352 }
2353 
qmp_marshal_input_expire_password(Monitor * mon,const QDict * qdict,QObject ** ret)2354 int qmp_marshal_input_expire_password(Monitor *mon, const QDict *qdict, QObject **ret)
2355 {
2356     Error *local_err = NULL;
2357     Error **errp = &local_err;
2358     QDict *args = (QDict *)qdict;
2359     QmpInputVisitor *mi;
2360     QapiDeallocVisitor *md;
2361     Visitor *v;
2362     char * protocol = NULL;
2363     char * time = NULL;
2364 
2365     mi = qmp_input_visitor_new_strict(QOBJECT(args));
2366     v = qmp_input_get_visitor(mi);
2367     visit_type_str(v, &protocol, "protocol", errp);
2368     visit_type_str(v, &time, "time", errp);
2369     qmp_input_visitor_cleanup(mi);
2370 
2371     if (error_is_set(errp)) {
2372         goto out;
2373     }
2374     qmp_expire_password(protocol, time, errp);
2375 
2376 out:
2377     md = qapi_dealloc_visitor_new();
2378     v = qapi_dealloc_get_visitor(md);
2379     visit_type_str(v, &protocol, "protocol", NULL);
2380     visit_type_str(v, &time, "time", NULL);
2381     qapi_dealloc_visitor_cleanup(md);
2382 
2383     if (local_err) {
2384         qerror_report_err(local_err);
2385         error_free(local_err);
2386         return -1;
2387     }
2388     return 0;
2389 }
2390 
qmp_marshal_input_eject(Monitor * mon,const QDict * qdict,QObject ** ret)2391 int qmp_marshal_input_eject(Monitor *mon, const QDict *qdict, QObject **ret)
2392 {
2393     Error *local_err = NULL;
2394     Error **errp = &local_err;
2395     QDict *args = (QDict *)qdict;
2396     QmpInputVisitor *mi;
2397     QapiDeallocVisitor *md;
2398     Visitor *v;
2399     char * device = NULL;
2400     bool has_force = false;
2401     bool force;
2402 
2403     mi = qmp_input_visitor_new_strict(QOBJECT(args));
2404     v = qmp_input_get_visitor(mi);
2405     visit_type_str(v, &device, "device", errp);
2406     visit_start_optional(v, &has_force, "force", errp);
2407     if (has_force) {
2408         visit_type_bool(v, &force, "force", errp);
2409     }
2410     visit_end_optional(v, errp);
2411     qmp_input_visitor_cleanup(mi);
2412 
2413     if (error_is_set(errp)) {
2414         goto out;
2415     }
2416     qmp_eject(device, has_force, force, errp);
2417 
2418 out:
2419     md = qapi_dealloc_visitor_new();
2420     v = qapi_dealloc_get_visitor(md);
2421     visit_type_str(v, &device, "device", NULL);
2422     visit_start_optional(v, &has_force, "force", NULL);
2423     if (has_force) {
2424         visit_type_bool(v, &force, "force", NULL);
2425     }
2426     visit_end_optional(v, NULL);
2427     qapi_dealloc_visitor_cleanup(md);
2428 
2429     if (local_err) {
2430         qerror_report_err(local_err);
2431         error_free(local_err);
2432         return -1;
2433     }
2434     return 0;
2435 }
2436 
qmp_marshal_input_change_vnc_password(Monitor * mon,const QDict * qdict,QObject ** ret)2437 int qmp_marshal_input_change_vnc_password(Monitor *mon, const QDict *qdict, QObject **ret)
2438 {
2439     Error *local_err = NULL;
2440     Error **errp = &local_err;
2441     QDict *args = (QDict *)qdict;
2442     QmpInputVisitor *mi;
2443     QapiDeallocVisitor *md;
2444     Visitor *v;
2445     char * password = NULL;
2446 
2447     mi = qmp_input_visitor_new_strict(QOBJECT(args));
2448     v = qmp_input_get_visitor(mi);
2449     visit_type_str(v, &password, "password", errp);
2450     qmp_input_visitor_cleanup(mi);
2451 
2452     if (error_is_set(errp)) {
2453         goto out;
2454     }
2455     qmp_change_vnc_password(password, errp);
2456 
2457 out:
2458     md = qapi_dealloc_visitor_new();
2459     v = qapi_dealloc_get_visitor(md);
2460     visit_type_str(v, &password, "password", NULL);
2461     qapi_dealloc_visitor_cleanup(md);
2462 
2463     if (local_err) {
2464         qerror_report_err(local_err);
2465         error_free(local_err);
2466         return -1;
2467     }
2468     return 0;
2469 }
2470 
qmp_marshal_input_change(Monitor * mon,const QDict * qdict,QObject ** ret)2471 int qmp_marshal_input_change(Monitor *mon, const QDict *qdict, QObject **ret)
2472 {
2473     Error *local_err = NULL;
2474     Error **errp = &local_err;
2475     QDict *args = (QDict *)qdict;
2476     QmpInputVisitor *mi;
2477     QapiDeallocVisitor *md;
2478     Visitor *v;
2479     char * device = NULL;
2480     char * target = NULL;
2481     bool has_arg = false;
2482     char * arg = NULL;
2483 
2484     mi = qmp_input_visitor_new_strict(QOBJECT(args));
2485     v = qmp_input_get_visitor(mi);
2486     visit_type_str(v, &device, "device", errp);
2487     visit_type_str(v, &target, "target", errp);
2488     visit_start_optional(v, &has_arg, "arg", errp);
2489     if (has_arg) {
2490         visit_type_str(v, &arg, "arg", errp);
2491     }
2492     visit_end_optional(v, errp);
2493     qmp_input_visitor_cleanup(mi);
2494 
2495     if (error_is_set(errp)) {
2496         goto out;
2497     }
2498     qmp_change(device, target, has_arg, arg, errp);
2499 
2500 out:
2501     md = qapi_dealloc_visitor_new();
2502     v = qapi_dealloc_get_visitor(md);
2503     visit_type_str(v, &device, "device", NULL);
2504     visit_type_str(v, &target, "target", NULL);
2505     visit_start_optional(v, &has_arg, "arg", NULL);
2506     if (has_arg) {
2507         visit_type_str(v, &arg, "arg", NULL);
2508     }
2509     visit_end_optional(v, NULL);
2510     qapi_dealloc_visitor_cleanup(md);
2511 
2512     if (local_err) {
2513         qerror_report_err(local_err);
2514         error_free(local_err);
2515         return -1;
2516     }
2517     return 0;
2518 }
2519 
qmp_marshal_input_block_set_io_throttle(Monitor * mon,const QDict * qdict,QObject ** ret)2520 int qmp_marshal_input_block_set_io_throttle(Monitor *mon, const QDict *qdict, QObject **ret)
2521 {
2522     Error *local_err = NULL;
2523     Error **errp = &local_err;
2524     QDict *args = (QDict *)qdict;
2525     QmpInputVisitor *mi;
2526     QapiDeallocVisitor *md;
2527     Visitor *v;
2528     char * device = NULL;
2529     int64_t bps;
2530     int64_t bps_rd;
2531     int64_t bps_wr;
2532     int64_t iops;
2533     int64_t iops_rd;
2534     int64_t iops_wr;
2535     bool has_bps_max = false;
2536     int64_t bps_max;
2537     bool has_bps_rd_max = false;
2538     int64_t bps_rd_max;
2539     bool has_bps_wr_max = false;
2540     int64_t bps_wr_max;
2541     bool has_iops_max = false;
2542     int64_t iops_max;
2543     bool has_iops_rd_max = false;
2544     int64_t iops_rd_max;
2545     bool has_iops_wr_max = false;
2546     int64_t iops_wr_max;
2547     bool has_iops_size = false;
2548     int64_t iops_size;
2549 
2550     mi = qmp_input_visitor_new_strict(QOBJECT(args));
2551     v = qmp_input_get_visitor(mi);
2552     visit_type_str(v, &device, "device", errp);
2553     visit_type_int(v, &bps, "bps", errp);
2554     visit_type_int(v, &bps_rd, "bps_rd", errp);
2555     visit_type_int(v, &bps_wr, "bps_wr", errp);
2556     visit_type_int(v, &iops, "iops", errp);
2557     visit_type_int(v, &iops_rd, "iops_rd", errp);
2558     visit_type_int(v, &iops_wr, "iops_wr", errp);
2559     visit_start_optional(v, &has_bps_max, "bps_max", errp);
2560     if (has_bps_max) {
2561         visit_type_int(v, &bps_max, "bps_max", errp);
2562     }
2563     visit_end_optional(v, errp);
2564     visit_start_optional(v, &has_bps_rd_max, "bps_rd_max", errp);
2565     if (has_bps_rd_max) {
2566         visit_type_int(v, &bps_rd_max, "bps_rd_max", errp);
2567     }
2568     visit_end_optional(v, errp);
2569     visit_start_optional(v, &has_bps_wr_max, "bps_wr_max", errp);
2570     if (has_bps_wr_max) {
2571         visit_type_int(v, &bps_wr_max, "bps_wr_max", errp);
2572     }
2573     visit_end_optional(v, errp);
2574     visit_start_optional(v, &has_iops_max, "iops_max", errp);
2575     if (has_iops_max) {
2576         visit_type_int(v, &iops_max, "iops_max", errp);
2577     }
2578     visit_end_optional(v, errp);
2579     visit_start_optional(v, &has_iops_rd_max, "iops_rd_max", errp);
2580     if (has_iops_rd_max) {
2581         visit_type_int(v, &iops_rd_max, "iops_rd_max", errp);
2582     }
2583     visit_end_optional(v, errp);
2584     visit_start_optional(v, &has_iops_wr_max, "iops_wr_max", errp);
2585     if (has_iops_wr_max) {
2586         visit_type_int(v, &iops_wr_max, "iops_wr_max", errp);
2587     }
2588     visit_end_optional(v, errp);
2589     visit_start_optional(v, &has_iops_size, "iops_size", errp);
2590     if (has_iops_size) {
2591         visit_type_int(v, &iops_size, "iops_size", errp);
2592     }
2593     visit_end_optional(v, errp);
2594     qmp_input_visitor_cleanup(mi);
2595 
2596     if (error_is_set(errp)) {
2597         goto out;
2598     }
2599     qmp_block_set_io_throttle(device, bps, bps_rd, bps_wr, iops, iops_rd, iops_wr, has_bps_max, bps_max, has_bps_rd_max, bps_rd_max, has_bps_wr_max, bps_wr_max, has_iops_max, iops_max, has_iops_rd_max, iops_rd_max, has_iops_wr_max, iops_wr_max, has_iops_size, iops_size, errp);
2600 
2601 out:
2602     md = qapi_dealloc_visitor_new();
2603     v = qapi_dealloc_get_visitor(md);
2604     visit_type_str(v, &device, "device", NULL);
2605     visit_type_int(v, &bps, "bps", NULL);
2606     visit_type_int(v, &bps_rd, "bps_rd", NULL);
2607     visit_type_int(v, &bps_wr, "bps_wr", NULL);
2608     visit_type_int(v, &iops, "iops", NULL);
2609     visit_type_int(v, &iops_rd, "iops_rd", NULL);
2610     visit_type_int(v, &iops_wr, "iops_wr", NULL);
2611     visit_start_optional(v, &has_bps_max, "bps_max", NULL);
2612     if (has_bps_max) {
2613         visit_type_int(v, &bps_max, "bps_max", NULL);
2614     }
2615     visit_end_optional(v, NULL);
2616     visit_start_optional(v, &has_bps_rd_max, "bps_rd_max", NULL);
2617     if (has_bps_rd_max) {
2618         visit_type_int(v, &bps_rd_max, "bps_rd_max", NULL);
2619     }
2620     visit_end_optional(v, NULL);
2621     visit_start_optional(v, &has_bps_wr_max, "bps_wr_max", NULL);
2622     if (has_bps_wr_max) {
2623         visit_type_int(v, &bps_wr_max, "bps_wr_max", NULL);
2624     }
2625     visit_end_optional(v, NULL);
2626     visit_start_optional(v, &has_iops_max, "iops_max", NULL);
2627     if (has_iops_max) {
2628         visit_type_int(v, &iops_max, "iops_max", NULL);
2629     }
2630     visit_end_optional(v, NULL);
2631     visit_start_optional(v, &has_iops_rd_max, "iops_rd_max", NULL);
2632     if (has_iops_rd_max) {
2633         visit_type_int(v, &iops_rd_max, "iops_rd_max", NULL);
2634     }
2635     visit_end_optional(v, NULL);
2636     visit_start_optional(v, &has_iops_wr_max, "iops_wr_max", NULL);
2637     if (has_iops_wr_max) {
2638         visit_type_int(v, &iops_wr_max, "iops_wr_max", NULL);
2639     }
2640     visit_end_optional(v, NULL);
2641     visit_start_optional(v, &has_iops_size, "iops_size", NULL);
2642     if (has_iops_size) {
2643         visit_type_int(v, &iops_size, "iops_size", NULL);
2644     }
2645     visit_end_optional(v, NULL);
2646     qapi_dealloc_visitor_cleanup(md);
2647 
2648     if (local_err) {
2649         qerror_report_err(local_err);
2650         error_free(local_err);
2651         return -1;
2652     }
2653     return 0;
2654 }
2655 
qmp_marshal_input_block_stream(Monitor * mon,const QDict * qdict,QObject ** ret)2656 int qmp_marshal_input_block_stream(Monitor *mon, const QDict *qdict, QObject **ret)
2657 {
2658     Error *local_err = NULL;
2659     Error **errp = &local_err;
2660     QDict *args = (QDict *)qdict;
2661     QmpInputVisitor *mi;
2662     QapiDeallocVisitor *md;
2663     Visitor *v;
2664     char * device = NULL;
2665     bool has_base = false;
2666     char * base = NULL;
2667     bool has_speed = false;
2668     int64_t speed;
2669     bool has_on_error = false;
2670     BlockdevOnError on_error;
2671 
2672     mi = qmp_input_visitor_new_strict(QOBJECT(args));
2673     v = qmp_input_get_visitor(mi);
2674     visit_type_str(v, &device, "device", errp);
2675     visit_start_optional(v, &has_base, "base", errp);
2676     if (has_base) {
2677         visit_type_str(v, &base, "base", errp);
2678     }
2679     visit_end_optional(v, errp);
2680     visit_start_optional(v, &has_speed, "speed", errp);
2681     if (has_speed) {
2682         visit_type_int(v, &speed, "speed", errp);
2683     }
2684     visit_end_optional(v, errp);
2685     visit_start_optional(v, &has_on_error, "on-error", errp);
2686     if (has_on_error) {
2687         visit_type_BlockdevOnError(v, &on_error, "on-error", errp);
2688     }
2689     visit_end_optional(v, errp);
2690     qmp_input_visitor_cleanup(mi);
2691 
2692     if (error_is_set(errp)) {
2693         goto out;
2694     }
2695     qmp_block_stream(device, has_base, base, has_speed, speed, has_on_error, on_error, errp);
2696 
2697 out:
2698     md = qapi_dealloc_visitor_new();
2699     v = qapi_dealloc_get_visitor(md);
2700     visit_type_str(v, &device, "device", NULL);
2701     visit_start_optional(v, &has_base, "base", NULL);
2702     if (has_base) {
2703         visit_type_str(v, &base, "base", NULL);
2704     }
2705     visit_end_optional(v, NULL);
2706     visit_start_optional(v, &has_speed, "speed", NULL);
2707     if (has_speed) {
2708         visit_type_int(v, &speed, "speed", NULL);
2709     }
2710     visit_end_optional(v, NULL);
2711     visit_start_optional(v, &has_on_error, "on-error", NULL);
2712     if (has_on_error) {
2713         visit_type_BlockdevOnError(v, &on_error, "on-error", NULL);
2714     }
2715     visit_end_optional(v, NULL);
2716     qapi_dealloc_visitor_cleanup(md);
2717 
2718     if (local_err) {
2719         qerror_report_err(local_err);
2720         error_free(local_err);
2721         return -1;
2722     }
2723     return 0;
2724 }
2725 
qmp_marshal_input_block_job_set_speed(Monitor * mon,const QDict * qdict,QObject ** ret)2726 int qmp_marshal_input_block_job_set_speed(Monitor *mon, const QDict *qdict, QObject **ret)
2727 {
2728     Error *local_err = NULL;
2729     Error **errp = &local_err;
2730     QDict *args = (QDict *)qdict;
2731     QmpInputVisitor *mi;
2732     QapiDeallocVisitor *md;
2733     Visitor *v;
2734     char * device = NULL;
2735     int64_t speed;
2736 
2737     mi = qmp_input_visitor_new_strict(QOBJECT(args));
2738     v = qmp_input_get_visitor(mi);
2739     visit_type_str(v, &device, "device", errp);
2740     visit_type_int(v, &speed, "speed", errp);
2741     qmp_input_visitor_cleanup(mi);
2742 
2743     if (error_is_set(errp)) {
2744         goto out;
2745     }
2746     qmp_block_job_set_speed(device, speed, errp);
2747 
2748 out:
2749     md = qapi_dealloc_visitor_new();
2750     v = qapi_dealloc_get_visitor(md);
2751     visit_type_str(v, &device, "device", NULL);
2752     visit_type_int(v, &speed, "speed", NULL);
2753     qapi_dealloc_visitor_cleanup(md);
2754 
2755     if (local_err) {
2756         qerror_report_err(local_err);
2757         error_free(local_err);
2758         return -1;
2759     }
2760     return 0;
2761 }
2762 
qmp_marshal_input_block_job_cancel(Monitor * mon,const QDict * qdict,QObject ** ret)2763 int qmp_marshal_input_block_job_cancel(Monitor *mon, const QDict *qdict, QObject **ret)
2764 {
2765     Error *local_err = NULL;
2766     Error **errp = &local_err;
2767     QDict *args = (QDict *)qdict;
2768     QmpInputVisitor *mi;
2769     QapiDeallocVisitor *md;
2770     Visitor *v;
2771     char * device = NULL;
2772     bool has_force = false;
2773     bool force;
2774 
2775     mi = qmp_input_visitor_new_strict(QOBJECT(args));
2776     v = qmp_input_get_visitor(mi);
2777     visit_type_str(v, &device, "device", errp);
2778     visit_start_optional(v, &has_force, "force", errp);
2779     if (has_force) {
2780         visit_type_bool(v, &force, "force", errp);
2781     }
2782     visit_end_optional(v, errp);
2783     qmp_input_visitor_cleanup(mi);
2784 
2785     if (error_is_set(errp)) {
2786         goto out;
2787     }
2788     qmp_block_job_cancel(device, has_force, force, errp);
2789 
2790 out:
2791     md = qapi_dealloc_visitor_new();
2792     v = qapi_dealloc_get_visitor(md);
2793     visit_type_str(v, &device, "device", NULL);
2794     visit_start_optional(v, &has_force, "force", NULL);
2795     if (has_force) {
2796         visit_type_bool(v, &force, "force", NULL);
2797     }
2798     visit_end_optional(v, NULL);
2799     qapi_dealloc_visitor_cleanup(md);
2800 
2801     if (local_err) {
2802         qerror_report_err(local_err);
2803         error_free(local_err);
2804         return -1;
2805     }
2806     return 0;
2807 }
2808 
qmp_marshal_input_block_job_pause(Monitor * mon,const QDict * qdict,QObject ** ret)2809 int qmp_marshal_input_block_job_pause(Monitor *mon, const QDict *qdict, QObject **ret)
2810 {
2811     Error *local_err = NULL;
2812     Error **errp = &local_err;
2813     QDict *args = (QDict *)qdict;
2814     QmpInputVisitor *mi;
2815     QapiDeallocVisitor *md;
2816     Visitor *v;
2817     char * device = NULL;
2818 
2819     mi = qmp_input_visitor_new_strict(QOBJECT(args));
2820     v = qmp_input_get_visitor(mi);
2821     visit_type_str(v, &device, "device", errp);
2822     qmp_input_visitor_cleanup(mi);
2823 
2824     if (error_is_set(errp)) {
2825         goto out;
2826     }
2827     qmp_block_job_pause(device, errp);
2828 
2829 out:
2830     md = qapi_dealloc_visitor_new();
2831     v = qapi_dealloc_get_visitor(md);
2832     visit_type_str(v, &device, "device", NULL);
2833     qapi_dealloc_visitor_cleanup(md);
2834 
2835     if (local_err) {
2836         qerror_report_err(local_err);
2837         error_free(local_err);
2838         return -1;
2839     }
2840     return 0;
2841 }
2842 
qmp_marshal_input_block_job_resume(Monitor * mon,const QDict * qdict,QObject ** ret)2843 int qmp_marshal_input_block_job_resume(Monitor *mon, const QDict *qdict, QObject **ret)
2844 {
2845     Error *local_err = NULL;
2846     Error **errp = &local_err;
2847     QDict *args = (QDict *)qdict;
2848     QmpInputVisitor *mi;
2849     QapiDeallocVisitor *md;
2850     Visitor *v;
2851     char * device = NULL;
2852 
2853     mi = qmp_input_visitor_new_strict(QOBJECT(args));
2854     v = qmp_input_get_visitor(mi);
2855     visit_type_str(v, &device, "device", errp);
2856     qmp_input_visitor_cleanup(mi);
2857 
2858     if (error_is_set(errp)) {
2859         goto out;
2860     }
2861     qmp_block_job_resume(device, errp);
2862 
2863 out:
2864     md = qapi_dealloc_visitor_new();
2865     v = qapi_dealloc_get_visitor(md);
2866     visit_type_str(v, &device, "device", NULL);
2867     qapi_dealloc_visitor_cleanup(md);
2868 
2869     if (local_err) {
2870         qerror_report_err(local_err);
2871         error_free(local_err);
2872         return -1;
2873     }
2874     return 0;
2875 }
2876 
qmp_marshal_input_block_job_complete(Monitor * mon,const QDict * qdict,QObject ** ret)2877 int qmp_marshal_input_block_job_complete(Monitor *mon, const QDict *qdict, QObject **ret)
2878 {
2879     Error *local_err = NULL;
2880     Error **errp = &local_err;
2881     QDict *args = (QDict *)qdict;
2882     QmpInputVisitor *mi;
2883     QapiDeallocVisitor *md;
2884     Visitor *v;
2885     char * device = NULL;
2886 
2887     mi = qmp_input_visitor_new_strict(QOBJECT(args));
2888     v = qmp_input_get_visitor(mi);
2889     visit_type_str(v, &device, "device", errp);
2890     qmp_input_visitor_cleanup(mi);
2891 
2892     if (error_is_set(errp)) {
2893         goto out;
2894     }
2895     qmp_block_job_complete(device, errp);
2896 
2897 out:
2898     md = qapi_dealloc_visitor_new();
2899     v = qapi_dealloc_get_visitor(md);
2900     visit_type_str(v, &device, "device", NULL);
2901     qapi_dealloc_visitor_cleanup(md);
2902 
2903     if (local_err) {
2904         qerror_report_err(local_err);
2905         error_free(local_err);
2906         return -1;
2907     }
2908     return 0;
2909 }
2910 
qmp_marshal_output_qom_list_types(ObjectTypeInfoList * ret_in,QObject ** ret_out,Error ** errp)2911 static void qmp_marshal_output_qom_list_types(ObjectTypeInfoList * ret_in, QObject **ret_out, Error **errp)
2912 {
2913     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
2914     QmpOutputVisitor *mo = qmp_output_visitor_new();
2915     Visitor *v;
2916 
2917     v = qmp_output_get_visitor(mo);
2918     visit_type_ObjectTypeInfoList(v, &ret_in, "unused", errp);
2919     if (!error_is_set(errp)) {
2920         *ret_out = qmp_output_get_qobject(mo);
2921     }
2922     qmp_output_visitor_cleanup(mo);
2923     v = qapi_dealloc_get_visitor(md);
2924     visit_type_ObjectTypeInfoList(v, &ret_in, "unused", NULL);
2925     qapi_dealloc_visitor_cleanup(md);
2926 }
2927 
qmp_marshal_input_qom_list_types(Monitor * mon,const QDict * qdict,QObject ** ret)2928 int qmp_marshal_input_qom_list_types(Monitor *mon, const QDict *qdict, QObject **ret)
2929 {
2930     Error *local_err = NULL;
2931     Error **errp = &local_err;
2932     QDict *args = (QDict *)qdict;
2933     ObjectTypeInfoList * retval = NULL;
2934     QmpInputVisitor *mi;
2935     QapiDeallocVisitor *md;
2936     Visitor *v;
2937     bool has_implements = false;
2938     char * implements = NULL;
2939     bool has_abstract = false;
2940     bool abstract;
2941 
2942     mi = qmp_input_visitor_new_strict(QOBJECT(args));
2943     v = qmp_input_get_visitor(mi);
2944     visit_start_optional(v, &has_implements, "implements", errp);
2945     if (has_implements) {
2946         visit_type_str(v, &implements, "implements", errp);
2947     }
2948     visit_end_optional(v, errp);
2949     visit_start_optional(v, &has_abstract, "abstract", errp);
2950     if (has_abstract) {
2951         visit_type_bool(v, &abstract, "abstract", errp);
2952     }
2953     visit_end_optional(v, errp);
2954     qmp_input_visitor_cleanup(mi);
2955 
2956     if (error_is_set(errp)) {
2957         goto out;
2958     }
2959     retval = qmp_qom_list_types(has_implements, implements, has_abstract, abstract, errp);
2960     if (!error_is_set(errp)) {
2961         qmp_marshal_output_qom_list_types(retval, ret, errp);
2962     }
2963 
2964 out:
2965     md = qapi_dealloc_visitor_new();
2966     v = qapi_dealloc_get_visitor(md);
2967     visit_start_optional(v, &has_implements, "implements", NULL);
2968     if (has_implements) {
2969         visit_type_str(v, &implements, "implements", NULL);
2970     }
2971     visit_end_optional(v, NULL);
2972     visit_start_optional(v, &has_abstract, "abstract", NULL);
2973     if (has_abstract) {
2974         visit_type_bool(v, &abstract, "abstract", NULL);
2975     }
2976     visit_end_optional(v, NULL);
2977     qapi_dealloc_visitor_cleanup(md);
2978 
2979     if (local_err) {
2980         qerror_report_err(local_err);
2981         error_free(local_err);
2982         return -1;
2983     }
2984     return 0;
2985 }
2986 
qmp_marshal_output_device_list_properties(DevicePropertyInfoList * ret_in,QObject ** ret_out,Error ** errp)2987 static void qmp_marshal_output_device_list_properties(DevicePropertyInfoList * ret_in, QObject **ret_out, Error **errp)
2988 {
2989     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
2990     QmpOutputVisitor *mo = qmp_output_visitor_new();
2991     Visitor *v;
2992 
2993     v = qmp_output_get_visitor(mo);
2994     visit_type_DevicePropertyInfoList(v, &ret_in, "unused", errp);
2995     if (!error_is_set(errp)) {
2996         *ret_out = qmp_output_get_qobject(mo);
2997     }
2998     qmp_output_visitor_cleanup(mo);
2999     v = qapi_dealloc_get_visitor(md);
3000     visit_type_DevicePropertyInfoList(v, &ret_in, "unused", NULL);
3001     qapi_dealloc_visitor_cleanup(md);
3002 }
3003 
qmp_marshal_input_device_list_properties(Monitor * mon,const QDict * qdict,QObject ** ret)3004 int qmp_marshal_input_device_list_properties(Monitor *mon, const QDict *qdict, QObject **ret)
3005 {
3006     Error *local_err = NULL;
3007     Error **errp = &local_err;
3008     QDict *args = (QDict *)qdict;
3009     DevicePropertyInfoList * retval = NULL;
3010     QmpInputVisitor *mi;
3011     QapiDeallocVisitor *md;
3012     Visitor *v;
3013     char * q_typename = NULL;
3014 
3015     mi = qmp_input_visitor_new_strict(QOBJECT(args));
3016     v = qmp_input_get_visitor(mi);
3017     visit_type_str(v, &q_typename, "typename", errp);
3018     qmp_input_visitor_cleanup(mi);
3019 
3020     if (error_is_set(errp)) {
3021         goto out;
3022     }
3023     retval = qmp_device_list_properties(q_typename, errp);
3024     if (!error_is_set(errp)) {
3025         qmp_marshal_output_device_list_properties(retval, ret, errp);
3026     }
3027 
3028 out:
3029     md = qapi_dealloc_visitor_new();
3030     v = qapi_dealloc_get_visitor(md);
3031     visit_type_str(v, &q_typename, "typename", NULL);
3032     qapi_dealloc_visitor_cleanup(md);
3033 
3034     if (local_err) {
3035         qerror_report_err(local_err);
3036         error_free(local_err);
3037         return -1;
3038     }
3039     return 0;
3040 }
3041 
qmp_marshal_input_migrate(Monitor * mon,const QDict * qdict,QObject ** ret)3042 int qmp_marshal_input_migrate(Monitor *mon, const QDict *qdict, QObject **ret)
3043 {
3044     Error *local_err = NULL;
3045     Error **errp = &local_err;
3046     QDict *args = (QDict *)qdict;
3047     QmpInputVisitor *mi;
3048     QapiDeallocVisitor *md;
3049     Visitor *v;
3050     char * uri = NULL;
3051     bool has_blk = false;
3052     bool blk;
3053     bool has_inc = false;
3054     bool inc;
3055     bool has_detach = false;
3056     bool detach;
3057 
3058     mi = qmp_input_visitor_new_strict(QOBJECT(args));
3059     v = qmp_input_get_visitor(mi);
3060     visit_type_str(v, &uri, "uri", errp);
3061     visit_start_optional(v, &has_blk, "blk", errp);
3062     if (has_blk) {
3063         visit_type_bool(v, &blk, "blk", errp);
3064     }
3065     visit_end_optional(v, errp);
3066     visit_start_optional(v, &has_inc, "inc", errp);
3067     if (has_inc) {
3068         visit_type_bool(v, &inc, "inc", errp);
3069     }
3070     visit_end_optional(v, errp);
3071     visit_start_optional(v, &has_detach, "detach", errp);
3072     if (has_detach) {
3073         visit_type_bool(v, &detach, "detach", errp);
3074     }
3075     visit_end_optional(v, errp);
3076     qmp_input_visitor_cleanup(mi);
3077 
3078     if (error_is_set(errp)) {
3079         goto out;
3080     }
3081     qmp_migrate(uri, has_blk, blk, has_inc, inc, has_detach, detach, errp);
3082 
3083 out:
3084     md = qapi_dealloc_visitor_new();
3085     v = qapi_dealloc_get_visitor(md);
3086     visit_type_str(v, &uri, "uri", NULL);
3087     visit_start_optional(v, &has_blk, "blk", NULL);
3088     if (has_blk) {
3089         visit_type_bool(v, &blk, "blk", NULL);
3090     }
3091     visit_end_optional(v, NULL);
3092     visit_start_optional(v, &has_inc, "inc", NULL);
3093     if (has_inc) {
3094         visit_type_bool(v, &inc, "inc", NULL);
3095     }
3096     visit_end_optional(v, NULL);
3097     visit_start_optional(v, &has_detach, "detach", NULL);
3098     if (has_detach) {
3099         visit_type_bool(v, &detach, "detach", NULL);
3100     }
3101     visit_end_optional(v, NULL);
3102     qapi_dealloc_visitor_cleanup(md);
3103 
3104     if (local_err) {
3105         qerror_report_err(local_err);
3106         error_free(local_err);
3107         return -1;
3108     }
3109     return 0;
3110 }
3111 
qmp_marshal_input_xen_save_devices_state(Monitor * mon,const QDict * qdict,QObject ** ret)3112 int qmp_marshal_input_xen_save_devices_state(Monitor *mon, const QDict *qdict, QObject **ret)
3113 {
3114     Error *local_err = NULL;
3115     Error **errp = &local_err;
3116     QDict *args = (QDict *)qdict;
3117     QmpInputVisitor *mi;
3118     QapiDeallocVisitor *md;
3119     Visitor *v;
3120     char * filename = NULL;
3121 
3122     mi = qmp_input_visitor_new_strict(QOBJECT(args));
3123     v = qmp_input_get_visitor(mi);
3124     visit_type_str(v, &filename, "filename", errp);
3125     qmp_input_visitor_cleanup(mi);
3126 
3127     if (error_is_set(errp)) {
3128         goto out;
3129     }
3130     qmp_xen_save_devices_state(filename, errp);
3131 
3132 out:
3133     md = qapi_dealloc_visitor_new();
3134     v = qapi_dealloc_get_visitor(md);
3135     visit_type_str(v, &filename, "filename", NULL);
3136     qapi_dealloc_visitor_cleanup(md);
3137 
3138     if (local_err) {
3139         qerror_report_err(local_err);
3140         error_free(local_err);
3141         return -1;
3142     }
3143     return 0;
3144 }
3145 
qmp_marshal_input_xen_set_global_dirty_log(Monitor * mon,const QDict * qdict,QObject ** ret)3146 int qmp_marshal_input_xen_set_global_dirty_log(Monitor *mon, const QDict *qdict, QObject **ret)
3147 {
3148     Error *local_err = NULL;
3149     Error **errp = &local_err;
3150     QDict *args = (QDict *)qdict;
3151     QmpInputVisitor *mi;
3152     QapiDeallocVisitor *md;
3153     Visitor *v;
3154     bool enable;
3155 
3156     mi = qmp_input_visitor_new_strict(QOBJECT(args));
3157     v = qmp_input_get_visitor(mi);
3158     visit_type_bool(v, &enable, "enable", errp);
3159     qmp_input_visitor_cleanup(mi);
3160 
3161     if (error_is_set(errp)) {
3162         goto out;
3163     }
3164     qmp_xen_set_global_dirty_log(enable, errp);
3165 
3166 out:
3167     md = qapi_dealloc_visitor_new();
3168     v = qapi_dealloc_get_visitor(md);
3169     visit_type_bool(v, &enable, "enable", NULL);
3170     qapi_dealloc_visitor_cleanup(md);
3171 
3172     if (local_err) {
3173         qerror_report_err(local_err);
3174         error_free(local_err);
3175         return -1;
3176     }
3177     return 0;
3178 }
3179 
qmp_marshal_input_device_del(Monitor * mon,const QDict * qdict,QObject ** ret)3180 int qmp_marshal_input_device_del(Monitor *mon, const QDict *qdict, QObject **ret)
3181 {
3182     Error *local_err = NULL;
3183     Error **errp = &local_err;
3184     QDict *args = (QDict *)qdict;
3185     QmpInputVisitor *mi;
3186     QapiDeallocVisitor *md;
3187     Visitor *v;
3188     char * id = NULL;
3189 
3190     mi = qmp_input_visitor_new_strict(QOBJECT(args));
3191     v = qmp_input_get_visitor(mi);
3192     visit_type_str(v, &id, "id", errp);
3193     qmp_input_visitor_cleanup(mi);
3194 
3195     if (error_is_set(errp)) {
3196         goto out;
3197     }
3198     qmp_device_del(id, errp);
3199 
3200 out:
3201     md = qapi_dealloc_visitor_new();
3202     v = qapi_dealloc_get_visitor(md);
3203     visit_type_str(v, &id, "id", NULL);
3204     qapi_dealloc_visitor_cleanup(md);
3205 
3206     if (local_err) {
3207         qerror_report_err(local_err);
3208         error_free(local_err);
3209         return -1;
3210     }
3211     return 0;
3212 }
3213 
qmp_marshal_input_dump_guest_memory(Monitor * mon,const QDict * qdict,QObject ** ret)3214 int qmp_marshal_input_dump_guest_memory(Monitor *mon, const QDict *qdict, QObject **ret)
3215 {
3216     Error *local_err = NULL;
3217     Error **errp = &local_err;
3218     QDict *args = (QDict *)qdict;
3219     QmpInputVisitor *mi;
3220     QapiDeallocVisitor *md;
3221     Visitor *v;
3222     bool paging;
3223     char * protocol = NULL;
3224     bool has_begin = false;
3225     int64_t begin;
3226     bool has_length = false;
3227     int64_t length;
3228 
3229     mi = qmp_input_visitor_new_strict(QOBJECT(args));
3230     v = qmp_input_get_visitor(mi);
3231     visit_type_bool(v, &paging, "paging", errp);
3232     visit_type_str(v, &protocol, "protocol", errp);
3233     visit_start_optional(v, &has_begin, "begin", errp);
3234     if (has_begin) {
3235         visit_type_int(v, &begin, "begin", errp);
3236     }
3237     visit_end_optional(v, errp);
3238     visit_start_optional(v, &has_length, "length", errp);
3239     if (has_length) {
3240         visit_type_int(v, &length, "length", errp);
3241     }
3242     visit_end_optional(v, errp);
3243     qmp_input_visitor_cleanup(mi);
3244 
3245     if (error_is_set(errp)) {
3246         goto out;
3247     }
3248     qmp_dump_guest_memory(paging, protocol, has_begin, begin, has_length, length, errp);
3249 
3250 out:
3251     md = qapi_dealloc_visitor_new();
3252     v = qapi_dealloc_get_visitor(md);
3253     visit_type_bool(v, &paging, "paging", NULL);
3254     visit_type_str(v, &protocol, "protocol", NULL);
3255     visit_start_optional(v, &has_begin, "begin", NULL);
3256     if (has_begin) {
3257         visit_type_int(v, &begin, "begin", NULL);
3258     }
3259     visit_end_optional(v, NULL);
3260     visit_start_optional(v, &has_length, "length", NULL);
3261     if (has_length) {
3262         visit_type_int(v, &length, "length", NULL);
3263     }
3264     visit_end_optional(v, NULL);
3265     qapi_dealloc_visitor_cleanup(md);
3266 
3267     if (local_err) {
3268         qerror_report_err(local_err);
3269         error_free(local_err);
3270         return -1;
3271     }
3272     return 0;
3273 }
3274 
qmp_marshal_input_netdev_del(Monitor * mon,const QDict * qdict,QObject ** ret)3275 int qmp_marshal_input_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret)
3276 {
3277     Error *local_err = NULL;
3278     Error **errp = &local_err;
3279     QDict *args = (QDict *)qdict;
3280     QmpInputVisitor *mi;
3281     QapiDeallocVisitor *md;
3282     Visitor *v;
3283     char * id = NULL;
3284 
3285     mi = qmp_input_visitor_new_strict(QOBJECT(args));
3286     v = qmp_input_get_visitor(mi);
3287     visit_type_str(v, &id, "id", errp);
3288     qmp_input_visitor_cleanup(mi);
3289 
3290     if (error_is_set(errp)) {
3291         goto out;
3292     }
3293     qmp_netdev_del(id, errp);
3294 
3295 out:
3296     md = qapi_dealloc_visitor_new();
3297     v = qapi_dealloc_get_visitor(md);
3298     visit_type_str(v, &id, "id", NULL);
3299     qapi_dealloc_visitor_cleanup(md);
3300 
3301     if (local_err) {
3302         qerror_report_err(local_err);
3303         error_free(local_err);
3304         return -1;
3305     }
3306     return 0;
3307 }
3308 
qmp_marshal_input_getfd(Monitor * mon,const QDict * qdict,QObject ** ret)3309 int qmp_marshal_input_getfd(Monitor *mon, const QDict *qdict, QObject **ret)
3310 {
3311     Error *local_err = NULL;
3312     Error **errp = &local_err;
3313     QDict *args = (QDict *)qdict;
3314     QmpInputVisitor *mi;
3315     QapiDeallocVisitor *md;
3316     Visitor *v;
3317     char * fdname = NULL;
3318 
3319     mi = qmp_input_visitor_new_strict(QOBJECT(args));
3320     v = qmp_input_get_visitor(mi);
3321     visit_type_str(v, &fdname, "fdname", errp);
3322     qmp_input_visitor_cleanup(mi);
3323 
3324     if (error_is_set(errp)) {
3325         goto out;
3326     }
3327     qmp_getfd(fdname, errp);
3328 
3329 out:
3330     md = qapi_dealloc_visitor_new();
3331     v = qapi_dealloc_get_visitor(md);
3332     visit_type_str(v, &fdname, "fdname", NULL);
3333     qapi_dealloc_visitor_cleanup(md);
3334 
3335     if (local_err) {
3336         qerror_report_err(local_err);
3337         error_free(local_err);
3338         return -1;
3339     }
3340     return 0;
3341 }
3342 
qmp_marshal_input_closefd(Monitor * mon,const QDict * qdict,QObject ** ret)3343 int qmp_marshal_input_closefd(Monitor *mon, const QDict *qdict, QObject **ret)
3344 {
3345     Error *local_err = NULL;
3346     Error **errp = &local_err;
3347     QDict *args = (QDict *)qdict;
3348     QmpInputVisitor *mi;
3349     QapiDeallocVisitor *md;
3350     Visitor *v;
3351     char * fdname = NULL;
3352 
3353     mi = qmp_input_visitor_new_strict(QOBJECT(args));
3354     v = qmp_input_get_visitor(mi);
3355     visit_type_str(v, &fdname, "fdname", errp);
3356     qmp_input_visitor_cleanup(mi);
3357 
3358     if (error_is_set(errp)) {
3359         goto out;
3360     }
3361     qmp_closefd(fdname, errp);
3362 
3363 out:
3364     md = qapi_dealloc_visitor_new();
3365     v = qapi_dealloc_get_visitor(md);
3366     visit_type_str(v, &fdname, "fdname", NULL);
3367     qapi_dealloc_visitor_cleanup(md);
3368 
3369     if (local_err) {
3370         qerror_report_err(local_err);
3371         error_free(local_err);
3372         return -1;
3373     }
3374     return 0;
3375 }
3376 
qmp_marshal_output_query_machines(MachineInfoList * ret_in,QObject ** ret_out,Error ** errp)3377 static void qmp_marshal_output_query_machines(MachineInfoList * ret_in, QObject **ret_out, Error **errp)
3378 {
3379     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
3380     QmpOutputVisitor *mo = qmp_output_visitor_new();
3381     Visitor *v;
3382 
3383     v = qmp_output_get_visitor(mo);
3384     visit_type_MachineInfoList(v, &ret_in, "unused", errp);
3385     if (!error_is_set(errp)) {
3386         *ret_out = qmp_output_get_qobject(mo);
3387     }
3388     qmp_output_visitor_cleanup(mo);
3389     v = qapi_dealloc_get_visitor(md);
3390     visit_type_MachineInfoList(v, &ret_in, "unused", NULL);
3391     qapi_dealloc_visitor_cleanup(md);
3392 }
3393 
qmp_marshal_input_query_machines(Monitor * mon,const QDict * qdict,QObject ** ret)3394 int qmp_marshal_input_query_machines(Monitor *mon, const QDict *qdict, QObject **ret)
3395 {
3396     Error *local_err = NULL;
3397     Error **errp = &local_err;
3398     QDict *args = (QDict *)qdict;
3399     MachineInfoList * retval = NULL;
3400     (void)args;
3401     if (error_is_set(errp)) {
3402         goto out;
3403     }
3404     retval = qmp_query_machines(errp);
3405     if (!error_is_set(errp)) {
3406         qmp_marshal_output_query_machines(retval, ret, errp);
3407     }
3408 
3409 out:
3410 
3411 
3412     if (local_err) {
3413         qerror_report_err(local_err);
3414         error_free(local_err);
3415         return -1;
3416     }
3417     return 0;
3418 }
3419 
qmp_marshal_output_query_cpu_definitions(CpuDefinitionInfoList * ret_in,QObject ** ret_out,Error ** errp)3420 static void qmp_marshal_output_query_cpu_definitions(CpuDefinitionInfoList * ret_in, QObject **ret_out, Error **errp)
3421 {
3422     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
3423     QmpOutputVisitor *mo = qmp_output_visitor_new();
3424     Visitor *v;
3425 
3426     v = qmp_output_get_visitor(mo);
3427     visit_type_CpuDefinitionInfoList(v, &ret_in, "unused", errp);
3428     if (!error_is_set(errp)) {
3429         *ret_out = qmp_output_get_qobject(mo);
3430     }
3431     qmp_output_visitor_cleanup(mo);
3432     v = qapi_dealloc_get_visitor(md);
3433     visit_type_CpuDefinitionInfoList(v, &ret_in, "unused", NULL);
3434     qapi_dealloc_visitor_cleanup(md);
3435 }
3436 
qmp_marshal_input_query_cpu_definitions(Monitor * mon,const QDict * qdict,QObject ** ret)3437 int qmp_marshal_input_query_cpu_definitions(Monitor *mon, const QDict *qdict, QObject **ret)
3438 {
3439     Error *local_err = NULL;
3440     Error **errp = &local_err;
3441     QDict *args = (QDict *)qdict;
3442     CpuDefinitionInfoList * retval = NULL;
3443     (void)args;
3444     if (error_is_set(errp)) {
3445         goto out;
3446     }
3447     retval = qmp_query_cpu_definitions(errp);
3448     if (!error_is_set(errp)) {
3449         qmp_marshal_output_query_cpu_definitions(retval, ret, errp);
3450     }
3451 
3452 out:
3453 
3454 
3455     if (local_err) {
3456         qerror_report_err(local_err);
3457         error_free(local_err);
3458         return -1;
3459     }
3460     return 0;
3461 }
3462 
qmp_marshal_output_add_fd(AddfdInfo * ret_in,QObject ** ret_out,Error ** errp)3463 static void qmp_marshal_output_add_fd(AddfdInfo * ret_in, QObject **ret_out, Error **errp)
3464 {
3465     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
3466     QmpOutputVisitor *mo = qmp_output_visitor_new();
3467     Visitor *v;
3468 
3469     v = qmp_output_get_visitor(mo);
3470     visit_type_AddfdInfo(v, &ret_in, "unused", errp);
3471     if (!error_is_set(errp)) {
3472         *ret_out = qmp_output_get_qobject(mo);
3473     }
3474     qmp_output_visitor_cleanup(mo);
3475     v = qapi_dealloc_get_visitor(md);
3476     visit_type_AddfdInfo(v, &ret_in, "unused", NULL);
3477     qapi_dealloc_visitor_cleanup(md);
3478 }
3479 
qmp_marshal_input_add_fd(Monitor * mon,const QDict * qdict,QObject ** ret)3480 int qmp_marshal_input_add_fd(Monitor *mon, const QDict *qdict, QObject **ret)
3481 {
3482     Error *local_err = NULL;
3483     Error **errp = &local_err;
3484     QDict *args = (QDict *)qdict;
3485     AddfdInfo * retval = NULL;
3486     QmpInputVisitor *mi;
3487     QapiDeallocVisitor *md;
3488     Visitor *v;
3489     bool has_fdset_id = false;
3490     int64_t fdset_id;
3491     bool has_opaque = false;
3492     char * opaque = NULL;
3493 
3494     mi = qmp_input_visitor_new_strict(QOBJECT(args));
3495     v = qmp_input_get_visitor(mi);
3496     visit_start_optional(v, &has_fdset_id, "fdset-id", errp);
3497     if (has_fdset_id) {
3498         visit_type_int(v, &fdset_id, "fdset-id", errp);
3499     }
3500     visit_end_optional(v, errp);
3501     visit_start_optional(v, &has_opaque, "opaque", errp);
3502     if (has_opaque) {
3503         visit_type_str(v, &opaque, "opaque", errp);
3504     }
3505     visit_end_optional(v, errp);
3506     qmp_input_visitor_cleanup(mi);
3507 
3508     if (error_is_set(errp)) {
3509         goto out;
3510     }
3511     retval = qmp_add_fd(has_fdset_id, fdset_id, has_opaque, opaque, errp);
3512     if (!error_is_set(errp)) {
3513         qmp_marshal_output_add_fd(retval, ret, errp);
3514     }
3515 
3516 out:
3517     md = qapi_dealloc_visitor_new();
3518     v = qapi_dealloc_get_visitor(md);
3519     visit_start_optional(v, &has_fdset_id, "fdset-id", NULL);
3520     if (has_fdset_id) {
3521         visit_type_int(v, &fdset_id, "fdset-id", NULL);
3522     }
3523     visit_end_optional(v, NULL);
3524     visit_start_optional(v, &has_opaque, "opaque", NULL);
3525     if (has_opaque) {
3526         visit_type_str(v, &opaque, "opaque", NULL);
3527     }
3528     visit_end_optional(v, NULL);
3529     qapi_dealloc_visitor_cleanup(md);
3530 
3531     if (local_err) {
3532         qerror_report_err(local_err);
3533         error_free(local_err);
3534         return -1;
3535     }
3536     return 0;
3537 }
3538 
qmp_marshal_input_remove_fd(Monitor * mon,const QDict * qdict,QObject ** ret)3539 int qmp_marshal_input_remove_fd(Monitor *mon, const QDict *qdict, QObject **ret)
3540 {
3541     Error *local_err = NULL;
3542     Error **errp = &local_err;
3543     QDict *args = (QDict *)qdict;
3544     QmpInputVisitor *mi;
3545     QapiDeallocVisitor *md;
3546     Visitor *v;
3547     int64_t fdset_id;
3548     bool has_fd = false;
3549     int64_t fd;
3550 
3551     mi = qmp_input_visitor_new_strict(QOBJECT(args));
3552     v = qmp_input_get_visitor(mi);
3553     visit_type_int(v, &fdset_id, "fdset-id", errp);
3554     visit_start_optional(v, &has_fd, "fd", errp);
3555     if (has_fd) {
3556         visit_type_int(v, &fd, "fd", errp);
3557     }
3558     visit_end_optional(v, errp);
3559     qmp_input_visitor_cleanup(mi);
3560 
3561     if (error_is_set(errp)) {
3562         goto out;
3563     }
3564     qmp_remove_fd(fdset_id, has_fd, fd, errp);
3565 
3566 out:
3567     md = qapi_dealloc_visitor_new();
3568     v = qapi_dealloc_get_visitor(md);
3569     visit_type_int(v, &fdset_id, "fdset-id", NULL);
3570     visit_start_optional(v, &has_fd, "fd", NULL);
3571     if (has_fd) {
3572         visit_type_int(v, &fd, "fd", NULL);
3573     }
3574     visit_end_optional(v, NULL);
3575     qapi_dealloc_visitor_cleanup(md);
3576 
3577     if (local_err) {
3578         qerror_report_err(local_err);
3579         error_free(local_err);
3580         return -1;
3581     }
3582     return 0;
3583 }
3584 
qmp_marshal_output_query_fdsets(FdsetInfoList * ret_in,QObject ** ret_out,Error ** errp)3585 static void qmp_marshal_output_query_fdsets(FdsetInfoList * ret_in, QObject **ret_out, Error **errp)
3586 {
3587     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
3588     QmpOutputVisitor *mo = qmp_output_visitor_new();
3589     Visitor *v;
3590 
3591     v = qmp_output_get_visitor(mo);
3592     visit_type_FdsetInfoList(v, &ret_in, "unused", errp);
3593     if (!error_is_set(errp)) {
3594         *ret_out = qmp_output_get_qobject(mo);
3595     }
3596     qmp_output_visitor_cleanup(mo);
3597     v = qapi_dealloc_get_visitor(md);
3598     visit_type_FdsetInfoList(v, &ret_in, "unused", NULL);
3599     qapi_dealloc_visitor_cleanup(md);
3600 }
3601 
qmp_marshal_input_query_fdsets(Monitor * mon,const QDict * qdict,QObject ** ret)3602 int qmp_marshal_input_query_fdsets(Monitor *mon, const QDict *qdict, QObject **ret)
3603 {
3604     Error *local_err = NULL;
3605     Error **errp = &local_err;
3606     QDict *args = (QDict *)qdict;
3607     FdsetInfoList * retval = NULL;
3608     (void)args;
3609     if (error_is_set(errp)) {
3610         goto out;
3611     }
3612     retval = qmp_query_fdsets(errp);
3613     if (!error_is_set(errp)) {
3614         qmp_marshal_output_query_fdsets(retval, ret, errp);
3615     }
3616 
3617 out:
3618 
3619 
3620     if (local_err) {
3621         qerror_report_err(local_err);
3622         error_free(local_err);
3623         return -1;
3624     }
3625     return 0;
3626 }
3627 
qmp_marshal_output_query_target(TargetInfo * ret_in,QObject ** ret_out,Error ** errp)3628 static void qmp_marshal_output_query_target(TargetInfo * ret_in, QObject **ret_out, Error **errp)
3629 {
3630     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
3631     QmpOutputVisitor *mo = qmp_output_visitor_new();
3632     Visitor *v;
3633 
3634     v = qmp_output_get_visitor(mo);
3635     visit_type_TargetInfo(v, &ret_in, "unused", errp);
3636     if (!error_is_set(errp)) {
3637         *ret_out = qmp_output_get_qobject(mo);
3638     }
3639     qmp_output_visitor_cleanup(mo);
3640     v = qapi_dealloc_get_visitor(md);
3641     visit_type_TargetInfo(v, &ret_in, "unused", NULL);
3642     qapi_dealloc_visitor_cleanup(md);
3643 }
3644 
qmp_marshal_input_query_target(Monitor * mon,const QDict * qdict,QObject ** ret)3645 int qmp_marshal_input_query_target(Monitor *mon, const QDict *qdict, QObject **ret)
3646 {
3647     Error *local_err = NULL;
3648     Error **errp = &local_err;
3649     QDict *args = (QDict *)qdict;
3650     TargetInfo * retval = NULL;
3651     (void)args;
3652     if (error_is_set(errp)) {
3653         goto out;
3654     }
3655     retval = qmp_query_target(errp);
3656     if (!error_is_set(errp)) {
3657         qmp_marshal_output_query_target(retval, ret, errp);
3658     }
3659 
3660 out:
3661 
3662 
3663     if (local_err) {
3664         qerror_report_err(local_err);
3665         error_free(local_err);
3666         return -1;
3667     }
3668     return 0;
3669 }
3670 
qmp_marshal_input_send_key(Monitor * mon,const QDict * qdict,QObject ** ret)3671 int qmp_marshal_input_send_key(Monitor *mon, const QDict *qdict, QObject **ret)
3672 {
3673     Error *local_err = NULL;
3674     Error **errp = &local_err;
3675     QDict *args = (QDict *)qdict;
3676     QmpInputVisitor *mi;
3677     QapiDeallocVisitor *md;
3678     Visitor *v;
3679     KeyValueList * keys = NULL;
3680     bool has_hold_time = false;
3681     int64_t hold_time;
3682 
3683     mi = qmp_input_visitor_new_strict(QOBJECT(args));
3684     v = qmp_input_get_visitor(mi);
3685     visit_type_KeyValueList(v, &keys, "keys", errp);
3686     visit_start_optional(v, &has_hold_time, "hold-time", errp);
3687     if (has_hold_time) {
3688         visit_type_int(v, &hold_time, "hold-time", errp);
3689     }
3690     visit_end_optional(v, errp);
3691     qmp_input_visitor_cleanup(mi);
3692 
3693     if (error_is_set(errp)) {
3694         goto out;
3695     }
3696     qmp_send_key(keys, has_hold_time, hold_time, errp);
3697 
3698 out:
3699     md = qapi_dealloc_visitor_new();
3700     v = qapi_dealloc_get_visitor(md);
3701     visit_type_KeyValueList(v, &keys, "keys", NULL);
3702     visit_start_optional(v, &has_hold_time, "hold-time", NULL);
3703     if (has_hold_time) {
3704         visit_type_int(v, &hold_time, "hold-time", NULL);
3705     }
3706     visit_end_optional(v, NULL);
3707     qapi_dealloc_visitor_cleanup(md);
3708 
3709     if (local_err) {
3710         qerror_report_err(local_err);
3711         error_free(local_err);
3712         return -1;
3713     }
3714     return 0;
3715 }
3716 
qmp_marshal_input_screendump(Monitor * mon,const QDict * qdict,QObject ** ret)3717 int qmp_marshal_input_screendump(Monitor *mon, const QDict *qdict, QObject **ret)
3718 {
3719     Error *local_err = NULL;
3720     Error **errp = &local_err;
3721     QDict *args = (QDict *)qdict;
3722     QmpInputVisitor *mi;
3723     QapiDeallocVisitor *md;
3724     Visitor *v;
3725     char * filename = NULL;
3726 
3727     mi = qmp_input_visitor_new_strict(QOBJECT(args));
3728     v = qmp_input_get_visitor(mi);
3729     visit_type_str(v, &filename, "filename", errp);
3730     qmp_input_visitor_cleanup(mi);
3731 
3732     if (error_is_set(errp)) {
3733         goto out;
3734     }
3735     qmp_screendump(filename, errp);
3736 
3737 out:
3738     md = qapi_dealloc_visitor_new();
3739     v = qapi_dealloc_get_visitor(md);
3740     visit_type_str(v, &filename, "filename", NULL);
3741     qapi_dealloc_visitor_cleanup(md);
3742 
3743     if (local_err) {
3744         qerror_report_err(local_err);
3745         error_free(local_err);
3746         return -1;
3747     }
3748     return 0;
3749 }
3750 
qmp_marshal_input_nbd_server_start(Monitor * mon,const QDict * qdict,QObject ** ret)3751 int qmp_marshal_input_nbd_server_start(Monitor *mon, const QDict *qdict, QObject **ret)
3752 {
3753     Error *local_err = NULL;
3754     Error **errp = &local_err;
3755     QDict *args = (QDict *)qdict;
3756     QmpInputVisitor *mi;
3757     QapiDeallocVisitor *md;
3758     Visitor *v;
3759     SocketAddress * addr = NULL;
3760 
3761     mi = qmp_input_visitor_new_strict(QOBJECT(args));
3762     v = qmp_input_get_visitor(mi);
3763     visit_type_SocketAddress(v, &addr, "addr", errp);
3764     qmp_input_visitor_cleanup(mi);
3765 
3766     if (error_is_set(errp)) {
3767         goto out;
3768     }
3769     qmp_nbd_server_start(addr, errp);
3770 
3771 out:
3772     md = qapi_dealloc_visitor_new();
3773     v = qapi_dealloc_get_visitor(md);
3774     visit_type_SocketAddress(v, &addr, "addr", NULL);
3775     qapi_dealloc_visitor_cleanup(md);
3776 
3777     if (local_err) {
3778         qerror_report_err(local_err);
3779         error_free(local_err);
3780         return -1;
3781     }
3782     return 0;
3783 }
3784 
qmp_marshal_input_nbd_server_add(Monitor * mon,const QDict * qdict,QObject ** ret)3785 int qmp_marshal_input_nbd_server_add(Monitor *mon, const QDict *qdict, QObject **ret)
3786 {
3787     Error *local_err = NULL;
3788     Error **errp = &local_err;
3789     QDict *args = (QDict *)qdict;
3790     QmpInputVisitor *mi;
3791     QapiDeallocVisitor *md;
3792     Visitor *v;
3793     char * device = NULL;
3794     bool has_writable = false;
3795     bool writable;
3796 
3797     mi = qmp_input_visitor_new_strict(QOBJECT(args));
3798     v = qmp_input_get_visitor(mi);
3799     visit_type_str(v, &device, "device", errp);
3800     visit_start_optional(v, &has_writable, "writable", errp);
3801     if (has_writable) {
3802         visit_type_bool(v, &writable, "writable", errp);
3803     }
3804     visit_end_optional(v, errp);
3805     qmp_input_visitor_cleanup(mi);
3806 
3807     if (error_is_set(errp)) {
3808         goto out;
3809     }
3810     qmp_nbd_server_add(device, has_writable, writable, errp);
3811 
3812 out:
3813     md = qapi_dealloc_visitor_new();
3814     v = qapi_dealloc_get_visitor(md);
3815     visit_type_str(v, &device, "device", NULL);
3816     visit_start_optional(v, &has_writable, "writable", NULL);
3817     if (has_writable) {
3818         visit_type_bool(v, &writable, "writable", NULL);
3819     }
3820     visit_end_optional(v, NULL);
3821     qapi_dealloc_visitor_cleanup(md);
3822 
3823     if (local_err) {
3824         qerror_report_err(local_err);
3825         error_free(local_err);
3826         return -1;
3827     }
3828     return 0;
3829 }
3830 
qmp_marshal_input_nbd_server_stop(Monitor * mon,const QDict * qdict,QObject ** ret)3831 int qmp_marshal_input_nbd_server_stop(Monitor *mon, const QDict *qdict, QObject **ret)
3832 {
3833     Error *local_err = NULL;
3834     Error **errp = &local_err;
3835     QDict *args = (QDict *)qdict;
3836     (void)args;
3837     if (error_is_set(errp)) {
3838         goto out;
3839     }
3840     qmp_nbd_server_stop(errp);
3841 
3842 out:
3843 
3844 
3845     if (local_err) {
3846         qerror_report_err(local_err);
3847         error_free(local_err);
3848         return -1;
3849     }
3850     return 0;
3851 }
3852 
qmp_marshal_output_chardev_add(ChardevReturn * ret_in,QObject ** ret_out,Error ** errp)3853 static void qmp_marshal_output_chardev_add(ChardevReturn * ret_in, QObject **ret_out, Error **errp)
3854 {
3855     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
3856     QmpOutputVisitor *mo = qmp_output_visitor_new();
3857     Visitor *v;
3858 
3859     v = qmp_output_get_visitor(mo);
3860     visit_type_ChardevReturn(v, &ret_in, "unused", errp);
3861     if (!error_is_set(errp)) {
3862         *ret_out = qmp_output_get_qobject(mo);
3863     }
3864     qmp_output_visitor_cleanup(mo);
3865     v = qapi_dealloc_get_visitor(md);
3866     visit_type_ChardevReturn(v, &ret_in, "unused", NULL);
3867     qapi_dealloc_visitor_cleanup(md);
3868 }
3869 
qmp_marshal_input_chardev_add(Monitor * mon,const QDict * qdict,QObject ** ret)3870 int qmp_marshal_input_chardev_add(Monitor *mon, const QDict *qdict, QObject **ret)
3871 {
3872     Error *local_err = NULL;
3873     Error **errp = &local_err;
3874     QDict *args = (QDict *)qdict;
3875     ChardevReturn * retval = NULL;
3876     QmpInputVisitor *mi;
3877     QapiDeallocVisitor *md;
3878     Visitor *v;
3879     char * id = NULL;
3880     ChardevBackend * backend = NULL;
3881 
3882     mi = qmp_input_visitor_new_strict(QOBJECT(args));
3883     v = qmp_input_get_visitor(mi);
3884     visit_type_str(v, &id, "id", errp);
3885     visit_type_ChardevBackend(v, &backend, "backend", errp);
3886     qmp_input_visitor_cleanup(mi);
3887 
3888     if (error_is_set(errp)) {
3889         goto out;
3890     }
3891     retval = qmp_chardev_add(id, backend, errp);
3892     if (!error_is_set(errp)) {
3893         qmp_marshal_output_chardev_add(retval, ret, errp);
3894     }
3895 
3896 out:
3897     md = qapi_dealloc_visitor_new();
3898     v = qapi_dealloc_get_visitor(md);
3899     visit_type_str(v, &id, "id", NULL);
3900     visit_type_ChardevBackend(v, &backend, "backend", NULL);
3901     qapi_dealloc_visitor_cleanup(md);
3902 
3903     if (local_err) {
3904         qerror_report_err(local_err);
3905         error_free(local_err);
3906         return -1;
3907     }
3908     return 0;
3909 }
3910 
qmp_marshal_input_chardev_remove(Monitor * mon,const QDict * qdict,QObject ** ret)3911 int qmp_marshal_input_chardev_remove(Monitor *mon, const QDict *qdict, QObject **ret)
3912 {
3913     Error *local_err = NULL;
3914     Error **errp = &local_err;
3915     QDict *args = (QDict *)qdict;
3916     QmpInputVisitor *mi;
3917     QapiDeallocVisitor *md;
3918     Visitor *v;
3919     char * id = NULL;
3920 
3921     mi = qmp_input_visitor_new_strict(QOBJECT(args));
3922     v = qmp_input_get_visitor(mi);
3923     visit_type_str(v, &id, "id", errp);
3924     qmp_input_visitor_cleanup(mi);
3925 
3926     if (error_is_set(errp)) {
3927         goto out;
3928     }
3929     qmp_chardev_remove(id, errp);
3930 
3931 out:
3932     md = qapi_dealloc_visitor_new();
3933     v = qapi_dealloc_get_visitor(md);
3934     visit_type_str(v, &id, "id", NULL);
3935     qapi_dealloc_visitor_cleanup(md);
3936 
3937     if (local_err) {
3938         qerror_report_err(local_err);
3939         error_free(local_err);
3940         return -1;
3941     }
3942     return 0;
3943 }
3944 
qmp_marshal_output_query_tpm_models(TpmModelList * ret_in,QObject ** ret_out,Error ** errp)3945 static void qmp_marshal_output_query_tpm_models(TpmModelList * ret_in, QObject **ret_out, Error **errp)
3946 {
3947     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
3948     QmpOutputVisitor *mo = qmp_output_visitor_new();
3949     Visitor *v;
3950 
3951     v = qmp_output_get_visitor(mo);
3952     visit_type_TpmModelList(v, &ret_in, "unused", errp);
3953     if (!error_is_set(errp)) {
3954         *ret_out = qmp_output_get_qobject(mo);
3955     }
3956     qmp_output_visitor_cleanup(mo);
3957     v = qapi_dealloc_get_visitor(md);
3958     visit_type_TpmModelList(v, &ret_in, "unused", NULL);
3959     qapi_dealloc_visitor_cleanup(md);
3960 }
3961 
qmp_marshal_input_query_tpm_models(Monitor * mon,const QDict * qdict,QObject ** ret)3962 int qmp_marshal_input_query_tpm_models(Monitor *mon, const QDict *qdict, QObject **ret)
3963 {
3964     Error *local_err = NULL;
3965     Error **errp = &local_err;
3966     QDict *args = (QDict *)qdict;
3967     TpmModelList * retval = NULL;
3968     (void)args;
3969     if (error_is_set(errp)) {
3970         goto out;
3971     }
3972     retval = qmp_query_tpm_models(errp);
3973     if (!error_is_set(errp)) {
3974         qmp_marshal_output_query_tpm_models(retval, ret, errp);
3975     }
3976 
3977 out:
3978 
3979 
3980     if (local_err) {
3981         qerror_report_err(local_err);
3982         error_free(local_err);
3983         return -1;
3984     }
3985     return 0;
3986 }
3987 
qmp_marshal_output_query_tpm_types(TpmTypeList * ret_in,QObject ** ret_out,Error ** errp)3988 static void qmp_marshal_output_query_tpm_types(TpmTypeList * ret_in, QObject **ret_out, Error **errp)
3989 {
3990     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
3991     QmpOutputVisitor *mo = qmp_output_visitor_new();
3992     Visitor *v;
3993 
3994     v = qmp_output_get_visitor(mo);
3995     visit_type_TpmTypeList(v, &ret_in, "unused", errp);
3996     if (!error_is_set(errp)) {
3997         *ret_out = qmp_output_get_qobject(mo);
3998     }
3999     qmp_output_visitor_cleanup(mo);
4000     v = qapi_dealloc_get_visitor(md);
4001     visit_type_TpmTypeList(v, &ret_in, "unused", NULL);
4002     qapi_dealloc_visitor_cleanup(md);
4003 }
4004 
qmp_marshal_input_query_tpm_types(Monitor * mon,const QDict * qdict,QObject ** ret)4005 int qmp_marshal_input_query_tpm_types(Monitor *mon, const QDict *qdict, QObject **ret)
4006 {
4007     Error *local_err = NULL;
4008     Error **errp = &local_err;
4009     QDict *args = (QDict *)qdict;
4010     TpmTypeList * retval = NULL;
4011     (void)args;
4012     if (error_is_set(errp)) {
4013         goto out;
4014     }
4015     retval = qmp_query_tpm_types(errp);
4016     if (!error_is_set(errp)) {
4017         qmp_marshal_output_query_tpm_types(retval, ret, errp);
4018     }
4019 
4020 out:
4021 
4022 
4023     if (local_err) {
4024         qerror_report_err(local_err);
4025         error_free(local_err);
4026         return -1;
4027     }
4028     return 0;
4029 }
4030 
qmp_marshal_output_query_tpm(TPMInfoList * ret_in,QObject ** ret_out,Error ** errp)4031 static void qmp_marshal_output_query_tpm(TPMInfoList * ret_in, QObject **ret_out, Error **errp)
4032 {
4033     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
4034     QmpOutputVisitor *mo = qmp_output_visitor_new();
4035     Visitor *v;
4036 
4037     v = qmp_output_get_visitor(mo);
4038     visit_type_TPMInfoList(v, &ret_in, "unused", errp);
4039     if (!error_is_set(errp)) {
4040         *ret_out = qmp_output_get_qobject(mo);
4041     }
4042     qmp_output_visitor_cleanup(mo);
4043     v = qapi_dealloc_get_visitor(md);
4044     visit_type_TPMInfoList(v, &ret_in, "unused", NULL);
4045     qapi_dealloc_visitor_cleanup(md);
4046 }
4047 
qmp_marshal_input_query_tpm(Monitor * mon,const QDict * qdict,QObject ** ret)4048 int qmp_marshal_input_query_tpm(Monitor *mon, const QDict *qdict, QObject **ret)
4049 {
4050     Error *local_err = NULL;
4051     Error **errp = &local_err;
4052     QDict *args = (QDict *)qdict;
4053     TPMInfoList * retval = NULL;
4054     (void)args;
4055     if (error_is_set(errp)) {
4056         goto out;
4057     }
4058     retval = qmp_query_tpm(errp);
4059     if (!error_is_set(errp)) {
4060         qmp_marshal_output_query_tpm(retval, ret, errp);
4061     }
4062 
4063 out:
4064 
4065 
4066     if (local_err) {
4067         qerror_report_err(local_err);
4068         error_free(local_err);
4069         return -1;
4070     }
4071     return 0;
4072 }
4073 
qmp_marshal_output_query_command_line_options(CommandLineOptionInfoList * ret_in,QObject ** ret_out,Error ** errp)4074 static void qmp_marshal_output_query_command_line_options(CommandLineOptionInfoList * ret_in, QObject **ret_out, Error **errp)
4075 {
4076     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
4077     QmpOutputVisitor *mo = qmp_output_visitor_new();
4078     Visitor *v;
4079 
4080     v = qmp_output_get_visitor(mo);
4081     visit_type_CommandLineOptionInfoList(v, &ret_in, "unused", errp);
4082     if (!error_is_set(errp)) {
4083         *ret_out = qmp_output_get_qobject(mo);
4084     }
4085     qmp_output_visitor_cleanup(mo);
4086     v = qapi_dealloc_get_visitor(md);
4087     visit_type_CommandLineOptionInfoList(v, &ret_in, "unused", NULL);
4088     qapi_dealloc_visitor_cleanup(md);
4089 }
4090 
qmp_marshal_input_query_command_line_options(Monitor * mon,const QDict * qdict,QObject ** ret)4091 int qmp_marshal_input_query_command_line_options(Monitor *mon, const QDict *qdict, QObject **ret)
4092 {
4093     Error *local_err = NULL;
4094     Error **errp = &local_err;
4095     QDict *args = (QDict *)qdict;
4096     CommandLineOptionInfoList * retval = NULL;
4097     QmpInputVisitor *mi;
4098     QapiDeallocVisitor *md;
4099     Visitor *v;
4100     bool has_option = false;
4101     char * option = NULL;
4102 
4103     mi = qmp_input_visitor_new_strict(QOBJECT(args));
4104     v = qmp_input_get_visitor(mi);
4105     visit_start_optional(v, &has_option, "option", errp);
4106     if (has_option) {
4107         visit_type_str(v, &option, "option", errp);
4108     }
4109     visit_end_optional(v, errp);
4110     qmp_input_visitor_cleanup(mi);
4111 
4112     if (error_is_set(errp)) {
4113         goto out;
4114     }
4115     retval = qmp_query_command_line_options(has_option, option, errp);
4116     if (!error_is_set(errp)) {
4117         qmp_marshal_output_query_command_line_options(retval, ret, errp);
4118     }
4119 
4120 out:
4121     md = qapi_dealloc_visitor_new();
4122     v = qapi_dealloc_get_visitor(md);
4123     visit_start_optional(v, &has_option, "option", NULL);
4124     if (has_option) {
4125         visit_type_str(v, &option, "option", NULL);
4126     }
4127     visit_end_optional(v, NULL);
4128     qapi_dealloc_visitor_cleanup(md);
4129 
4130     if (local_err) {
4131         qerror_report_err(local_err);
4132         error_free(local_err);
4133         return -1;
4134     }
4135     return 0;
4136 }
4137 
qmp_marshal_output_query_rx_filter(RxFilterInfoList * ret_in,QObject ** ret_out,Error ** errp)4138 static void qmp_marshal_output_query_rx_filter(RxFilterInfoList * ret_in, QObject **ret_out, Error **errp)
4139 {
4140     QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
4141     QmpOutputVisitor *mo = qmp_output_visitor_new();
4142     Visitor *v;
4143 
4144     v = qmp_output_get_visitor(mo);
4145     visit_type_RxFilterInfoList(v, &ret_in, "unused", errp);
4146     if (!error_is_set(errp)) {
4147         *ret_out = qmp_output_get_qobject(mo);
4148     }
4149     qmp_output_visitor_cleanup(mo);
4150     v = qapi_dealloc_get_visitor(md);
4151     visit_type_RxFilterInfoList(v, &ret_in, "unused", NULL);
4152     qapi_dealloc_visitor_cleanup(md);
4153 }
4154 
qmp_marshal_input_query_rx_filter(Monitor * mon,const QDict * qdict,QObject ** ret)4155 int qmp_marshal_input_query_rx_filter(Monitor *mon, const QDict *qdict, QObject **ret)
4156 {
4157     Error *local_err = NULL;
4158     Error **errp = &local_err;
4159     QDict *args = (QDict *)qdict;
4160     RxFilterInfoList * retval = NULL;
4161     QmpInputVisitor *mi;
4162     QapiDeallocVisitor *md;
4163     Visitor *v;
4164     bool has_name = false;
4165     char * name = NULL;
4166 
4167     mi = qmp_input_visitor_new_strict(QOBJECT(args));
4168     v = qmp_input_get_visitor(mi);
4169     visit_start_optional(v, &has_name, "name", errp);
4170     if (has_name) {
4171         visit_type_str(v, &name, "name", errp);
4172     }
4173     visit_end_optional(v, errp);
4174     qmp_input_visitor_cleanup(mi);
4175 
4176     if (error_is_set(errp)) {
4177         goto out;
4178     }
4179     retval = qmp_query_rx_filter(has_name, name, errp);
4180     if (!error_is_set(errp)) {
4181         qmp_marshal_output_query_rx_filter(retval, ret, errp);
4182     }
4183 
4184 out:
4185     md = qapi_dealloc_visitor_new();
4186     v = qapi_dealloc_get_visitor(md);
4187     visit_start_optional(v, &has_name, "name", NULL);
4188     if (has_name) {
4189         visit_type_str(v, &name, "name", NULL);
4190     }
4191     visit_end_optional(v, NULL);
4192     qapi_dealloc_visitor_cleanup(md);
4193 
4194     if (local_err) {
4195         qerror_report_err(local_err);
4196         error_free(local_err);
4197         return -1;
4198     }
4199     return 0;
4200 }
4201 
qmp_marshal_input_blockdev_add(Monitor * mon,const QDict * qdict,QObject ** ret)4202 int qmp_marshal_input_blockdev_add(Monitor *mon, const QDict *qdict, QObject **ret)
4203 {
4204     Error *local_err = NULL;
4205     Error **errp = &local_err;
4206     QDict *args = (QDict *)qdict;
4207     QmpInputVisitor *mi;
4208     QapiDeallocVisitor *md;
4209     Visitor *v;
4210     BlockdevOptions * options = NULL;
4211 
4212     mi = qmp_input_visitor_new_strict(QOBJECT(args));
4213     v = qmp_input_get_visitor(mi);
4214     visit_type_BlockdevOptions(v, &options, "options", errp);
4215     qmp_input_visitor_cleanup(mi);
4216 
4217     if (error_is_set(errp)) {
4218         goto out;
4219     }
4220     qmp_blockdev_add(options, errp);
4221 
4222 out:
4223     md = qapi_dealloc_visitor_new();
4224     v = qapi_dealloc_get_visitor(md);
4225     visit_type_BlockdevOptions(v, &options, "options", NULL);
4226     qapi_dealloc_visitor_cleanup(md);
4227 
4228     if (local_err) {
4229         qerror_report_err(local_err);
4230         error_free(local_err);
4231         return -1;
4232     }
4233     return 0;
4234 }
4235 
4236