]> rtime.felk.cvut.cz Git - lisovros/qemu_apohw.git/blob - monitor.c
virtio-net: fix the memory leak in rxfilter_notify()
[lisovros/qemu_apohw.git] / monitor.c
1 /*
2  * QEMU monitor
3  *
4  * Copyright (c) 2003-2004 Fabrice Bellard
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to deal
8  * in the Software without restriction, including without limitation the rights
9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  * copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22  * THE SOFTWARE.
23  */
24 #include <dirent.h>
25 #include "hw/hw.h"
26 #include "monitor/qdev.h"
27 #include "hw/usb.h"
28 #include "hw/pcmcia.h"
29 #include "hw/i386/pc.h"
30 #include "hw/pci/pci.h"
31 #include "sysemu/watchdog.h"
32 #include "hw/loader.h"
33 #include "exec/gdbstub.h"
34 #include "net/net.h"
35 #include "net/slirp.h"
36 #include "sysemu/char.h"
37 #include "ui/qemu-spice.h"
38 #include "sysemu/sysemu.h"
39 #include "monitor/monitor.h"
40 #include "monitor/readline.h"
41 #include "ui/console.h"
42 #include "sysemu/blockdev.h"
43 #include "audio/audio.h"
44 #include "disas/disas.h"
45 #include "sysemu/balloon.h"
46 #include "qemu/timer.h"
47 #include "migration/migration.h"
48 #include "sysemu/kvm.h"
49 #include "qemu/acl.h"
50 #include "sysemu/tpm.h"
51 #include "qapi/qmp/qint.h"
52 #include "qapi/qmp/qfloat.h"
53 #include "qapi/qmp/qlist.h"
54 #include "qapi/qmp/qbool.h"
55 #include "qapi/qmp/qstring.h"
56 #include "qapi/qmp/qjson.h"
57 #include "qapi/qmp/json-streamer.h"
58 #include "qapi/qmp/json-parser.h"
59 #include "qemu/osdep.h"
60 #include "cpu.h"
61 #include "trace.h"
62 #include "trace/control.h"
63 #ifdef CONFIG_TRACE_SIMPLE
64 #include "trace/simple.h"
65 #endif
66 #include "exec/memory.h"
67 #include "qmp-commands.h"
68 #include "hmp.h"
69 #include "qemu/thread.h"
70
71 /* for pic/irq_info */
72 #if defined(TARGET_SPARC)
73 #include "hw/sparc/sun4m.h"
74 #endif
75 #include "hw/lm32/lm32_pic.h"
76
77 //#define DEBUG
78 //#define DEBUG_COMPLETION
79
80 /*
81  * Supported types:
82  *
83  * 'F'          filename
84  * 'B'          block device name
85  * 's'          string (accept optional quote)
86  * 'O'          option string of the form NAME=VALUE,...
87  *              parsed according to QemuOptsList given by its name
88  *              Example: 'device:O' uses qemu_device_opts.
89  *              Restriction: only lists with empty desc are supported
90  *              TODO lift the restriction
91  * 'i'          32 bit integer
92  * 'l'          target long (32 or 64 bit)
93  * 'M'          Non-negative target long (32 or 64 bit), in user mode the
94  *              value is multiplied by 2^20 (think Mebibyte)
95  * 'o'          octets (aka bytes)
96  *              user mode accepts an optional E, e, P, p, T, t, G, g, M, m,
97  *              K, k suffix, which multiplies the value by 2^60 for suffixes E
98  *              and e, 2^50 for suffixes P and p, 2^40 for suffixes T and t,
99  *              2^30 for suffixes G and g, 2^20 for M and m, 2^10 for K and k
100  * 'T'          double
101  *              user mode accepts an optional ms, us, ns suffix,
102  *              which divides the value by 1e3, 1e6, 1e9, respectively
103  * '/'          optional gdb-like print format (like "/10x")
104  *
105  * '?'          optional type (for all types, except '/')
106  * '.'          other form of optional type (for 'i' and 'l')
107  * 'b'          boolean
108  *              user mode accepts "on" or "off"
109  * '-'          optional parameter (eg. '-f')
110  *
111  */
112
113 typedef struct MonitorCompletionData MonitorCompletionData;
114 struct MonitorCompletionData {
115     Monitor *mon;
116     void (*user_print)(Monitor *mon, const QObject *data);
117 };
118
119 typedef struct mon_cmd_t {
120     const char *name;
121     const char *args_type;
122     const char *params;
123     const char *help;
124     void (*user_print)(Monitor *mon, const QObject *data);
125     union {
126         void (*cmd)(Monitor *mon, const QDict *qdict);
127         int  (*cmd_new)(Monitor *mon, const QDict *params, QObject **ret_data);
128         int  (*cmd_async)(Monitor *mon, const QDict *params,
129                           MonitorCompletion *cb, void *opaque);
130     } mhandler;
131     int flags;
132     /* @sub_table is a list of 2nd level of commands. If it do not exist,
133      * mhandler should be used. If it exist, sub_table[?].mhandler should be
134      * used, and mhandler of 1st level plays the role of help function.
135      */
136     struct mon_cmd_t *sub_table;
137 } mon_cmd_t;
138
139 /* file descriptors passed via SCM_RIGHTS */
140 typedef struct mon_fd_t mon_fd_t;
141 struct mon_fd_t {
142     char *name;
143     int fd;
144     QLIST_ENTRY(mon_fd_t) next;
145 };
146
147 /* file descriptor associated with a file descriptor set */
148 typedef struct MonFdsetFd MonFdsetFd;
149 struct MonFdsetFd {
150     int fd;
151     bool removed;
152     char *opaque;
153     QLIST_ENTRY(MonFdsetFd) next;
154 };
155
156 /* file descriptor set containing fds passed via SCM_RIGHTS */
157 typedef struct MonFdset MonFdset;
158 struct MonFdset {
159     int64_t id;
160     QLIST_HEAD(, MonFdsetFd) fds;
161     QLIST_HEAD(, MonFdsetFd) dup_fds;
162     QLIST_ENTRY(MonFdset) next;
163 };
164
165 typedef struct MonitorControl {
166     QObject *id;
167     JSONMessageParser parser;
168     int command_mode;
169 } MonitorControl;
170
171 /*
172  * To prevent flooding clients, events can be throttled. The
173  * throttling is calculated globally, rather than per-Monitor
174  * instance.
175  */
176 typedef struct MonitorEventState {
177     MonitorEvent event; /* Event being tracked */
178     int64_t rate;       /* Period over which to throttle. 0 to disable */
179     int64_t last;       /* Time at which event was last emitted */
180     QEMUTimer *timer;   /* Timer for handling delayed events */
181     QObject *data;      /* Event pending delayed dispatch */
182 } MonitorEventState;
183
184 struct Monitor {
185     CharDriverState *chr;
186     int mux_out;
187     int reset_seen;
188     int flags;
189     int suspend_cnt;
190     bool skip_flush;
191     QString *outbuf;
192     guint watch;
193     ReadLineState *rs;
194     MonitorControl *mc;
195     CPUState *mon_cpu;
196     BlockDriverCompletionFunc *password_completion_cb;
197     void *password_opaque;
198     QError *error;
199     QLIST_HEAD(,mon_fd_t) fds;
200     QLIST_ENTRY(Monitor) entry;
201 };
202
203 /* QMP checker flags */
204 #define QMP_ACCEPT_UNKNOWNS 1
205
206 static QLIST_HEAD(mon_list, Monitor) mon_list;
207 static QLIST_HEAD(mon_fdsets, MonFdset) mon_fdsets;
208 static int mon_refcount;
209
210 static mon_cmd_t mon_cmds[];
211 static mon_cmd_t info_cmds[];
212
213 static const mon_cmd_t qmp_cmds[];
214
215 Monitor *cur_mon;
216 Monitor *default_mon;
217
218 static void monitor_command_cb(Monitor *mon, const char *cmdline,
219                                void *opaque);
220
221 static inline int qmp_cmd_mode(const Monitor *mon)
222 {
223     return (mon->mc ? mon->mc->command_mode : 0);
224 }
225
226 /* Return true if in control mode, false otherwise */
227 static inline int monitor_ctrl_mode(const Monitor *mon)
228 {
229     return (mon->flags & MONITOR_USE_CONTROL);
230 }
231
232 /* Return non-zero iff we have a current monitor, and it is in QMP mode.  */
233 int monitor_cur_is_qmp(void)
234 {
235     return cur_mon && monitor_ctrl_mode(cur_mon);
236 }
237
238 void monitor_read_command(Monitor *mon, int show_prompt)
239 {
240     if (!mon->rs)
241         return;
242
243     readline_start(mon->rs, "(qemu) ", 0, monitor_command_cb, NULL);
244     if (show_prompt)
245         readline_show_prompt(mon->rs);
246 }
247
248 int monitor_read_password(Monitor *mon, ReadLineFunc *readline_func,
249                           void *opaque)
250 {
251     if (monitor_ctrl_mode(mon)) {
252         qerror_report(QERR_MISSING_PARAMETER, "password");
253         return -EINVAL;
254     } else if (mon->rs) {
255         readline_start(mon->rs, "Password: ", 1, readline_func, opaque);
256         /* prompt is printed on return from the command handler */
257         return 0;
258     } else {
259         monitor_printf(mon, "terminal does not support password prompting\n");
260         return -ENOTTY;
261     }
262 }
263
264 static gboolean monitor_unblocked(GIOChannel *chan, GIOCondition cond,
265                                   void *opaque)
266 {
267     Monitor *mon = opaque;
268
269     mon->watch = 0;
270     monitor_flush(mon);
271     return FALSE;
272 }
273
274 void monitor_flush(Monitor *mon)
275 {
276     int rc;
277     size_t len;
278     const char *buf;
279
280     if (mon->skip_flush) {
281         return;
282     }
283
284     buf = qstring_get_str(mon->outbuf);
285     len = qstring_get_length(mon->outbuf);
286
287     if (len && !mon->mux_out) {
288         rc = qemu_chr_fe_write(mon->chr, (const uint8_t *) buf, len);
289         if (rc == len) {
290             /* all flushed */
291             QDECREF(mon->outbuf);
292             mon->outbuf = qstring_new();
293             return;
294         }
295         if (rc > 0) {
296             /* partinal write */
297             QString *tmp = qstring_from_str(buf + rc);
298             QDECREF(mon->outbuf);
299             mon->outbuf = tmp;
300         }
301         if (mon->watch == 0) {
302             mon->watch = qemu_chr_fe_add_watch(mon->chr, G_IO_OUT,
303                                                monitor_unblocked, mon);
304         }
305     }
306 }
307
308 /* flush at every end of line */
309 static void monitor_puts(Monitor *mon, const char *str)
310 {
311     char c;
312
313     for(;;) {
314         c = *str++;
315         if (c == '\0')
316             break;
317         if (c == '\n') {
318             qstring_append_chr(mon->outbuf, '\r');
319         }
320         qstring_append_chr(mon->outbuf, c);
321         if (c == '\n') {
322             monitor_flush(mon);
323         }
324     }
325 }
326
327 void monitor_vprintf(Monitor *mon, const char *fmt, va_list ap)
328 {
329     char *buf;
330
331     if (!mon)
332         return;
333
334     if (monitor_ctrl_mode(mon)) {
335         return;
336     }
337
338     buf = g_strdup_vprintf(fmt, ap);
339     monitor_puts(mon, buf);
340     g_free(buf);
341 }
342
343 void monitor_printf(Monitor *mon, const char *fmt, ...)
344 {
345     va_list ap;
346     va_start(ap, fmt);
347     monitor_vprintf(mon, fmt, ap);
348     va_end(ap);
349 }
350
351 void monitor_print_filename(Monitor *mon, const char *filename)
352 {
353     int i;
354
355     for (i = 0; filename[i]; i++) {
356         switch (filename[i]) {
357         case ' ':
358         case '"':
359         case '\\':
360             monitor_printf(mon, "\\%c", filename[i]);
361             break;
362         case '\t':
363             monitor_printf(mon, "\\t");
364             break;
365         case '\r':
366             monitor_printf(mon, "\\r");
367             break;
368         case '\n':
369             monitor_printf(mon, "\\n");
370             break;
371         default:
372             monitor_printf(mon, "%c", filename[i]);
373             break;
374         }
375     }
376 }
377
378 static int GCC_FMT_ATTR(2, 3) monitor_fprintf(FILE *stream,
379                                               const char *fmt, ...)
380 {
381     va_list ap;
382     va_start(ap, fmt);
383     monitor_vprintf((Monitor *)stream, fmt, ap);
384     va_end(ap);
385     return 0;
386 }
387
388 static void monitor_user_noop(Monitor *mon, const QObject *data) { }
389
390 static inline int handler_is_qobject(const mon_cmd_t *cmd)
391 {
392     return cmd->user_print != NULL;
393 }
394
395 static inline bool handler_is_async(const mon_cmd_t *cmd)
396 {
397     return cmd->flags & MONITOR_CMD_ASYNC;
398 }
399
400 static inline int monitor_has_error(const Monitor *mon)
401 {
402     return mon->error != NULL;
403 }
404
405 static void monitor_json_emitter(Monitor *mon, const QObject *data)
406 {
407     QString *json;
408
409     json = mon->flags & MONITOR_USE_PRETTY ? qobject_to_json_pretty(data) :
410                                              qobject_to_json(data);
411     assert(json != NULL);
412
413     qstring_append_chr(json, '\n');
414     monitor_puts(mon, qstring_get_str(json));
415
416     QDECREF(json);
417 }
418
419 static QDict *build_qmp_error_dict(const QError *err)
420 {
421     QObject *obj;
422
423     obj = qobject_from_jsonf("{ 'error': { 'class': %s, 'desc': %p } }",
424                              ErrorClass_lookup[err->err_class],
425                              qerror_human(err));
426
427     return qobject_to_qdict(obj);
428 }
429
430 static void monitor_protocol_emitter(Monitor *mon, QObject *data)
431 {
432     QDict *qmp;
433
434     trace_monitor_protocol_emitter(mon);
435
436     if (!monitor_has_error(mon)) {
437         /* success response */
438         qmp = qdict_new();
439         if (data) {
440             qobject_incref(data);
441             qdict_put_obj(qmp, "return", data);
442         } else {
443             /* return an empty QDict by default */
444             qdict_put(qmp, "return", qdict_new());
445         }
446     } else {
447         /* error response */
448         qmp = build_qmp_error_dict(mon->error);
449         QDECREF(mon->error);
450         mon->error = NULL;
451     }
452
453     if (mon->mc->id) {
454         qdict_put_obj(qmp, "id", mon->mc->id);
455         mon->mc->id = NULL;
456     }
457
458     monitor_json_emitter(mon, QOBJECT(qmp));
459     QDECREF(qmp);
460 }
461
462 static void timestamp_put(QDict *qdict)
463 {
464     int err;
465     QObject *obj;
466     qemu_timeval tv;
467
468     err = qemu_gettimeofday(&tv);
469     if (err < 0)
470         return;
471
472     obj = qobject_from_jsonf("{ 'seconds': %" PRId64 ", "
473                                 "'microseconds': %" PRId64 " }",
474                                 (int64_t) tv.tv_sec, (int64_t) tv.tv_usec);
475     qdict_put_obj(qdict, "timestamp", obj);
476 }
477
478
479 static const char *monitor_event_names[] = {
480     [QEVENT_SHUTDOWN] = "SHUTDOWN",
481     [QEVENT_RESET] = "RESET",
482     [QEVENT_POWERDOWN] = "POWERDOWN",
483     [QEVENT_STOP] = "STOP",
484     [QEVENT_RESUME] = "RESUME",
485     [QEVENT_VNC_CONNECTED] = "VNC_CONNECTED",
486     [QEVENT_VNC_INITIALIZED] = "VNC_INITIALIZED",
487     [QEVENT_VNC_DISCONNECTED] = "VNC_DISCONNECTED",
488     [QEVENT_BLOCK_IO_ERROR] = "BLOCK_IO_ERROR",
489     [QEVENT_RTC_CHANGE] = "RTC_CHANGE",
490     [QEVENT_WATCHDOG] = "WATCHDOG",
491     [QEVENT_SPICE_CONNECTED] = "SPICE_CONNECTED",
492     [QEVENT_SPICE_INITIALIZED] = "SPICE_INITIALIZED",
493     [QEVENT_SPICE_DISCONNECTED] = "SPICE_DISCONNECTED",
494     [QEVENT_BLOCK_JOB_COMPLETED] = "BLOCK_JOB_COMPLETED",
495     [QEVENT_BLOCK_JOB_CANCELLED] = "BLOCK_JOB_CANCELLED",
496     [QEVENT_BLOCK_JOB_ERROR] = "BLOCK_JOB_ERROR",
497     [QEVENT_BLOCK_JOB_READY] = "BLOCK_JOB_READY",
498     [QEVENT_DEVICE_DELETED] = "DEVICE_DELETED",
499     [QEVENT_DEVICE_TRAY_MOVED] = "DEVICE_TRAY_MOVED",
500     [QEVENT_NIC_RX_FILTER_CHANGED] = "NIC_RX_FILTER_CHANGED",
501     [QEVENT_SUSPEND] = "SUSPEND",
502     [QEVENT_SUSPEND_DISK] = "SUSPEND_DISK",
503     [QEVENT_WAKEUP] = "WAKEUP",
504     [QEVENT_BALLOON_CHANGE] = "BALLOON_CHANGE",
505     [QEVENT_SPICE_MIGRATE_COMPLETED] = "SPICE_MIGRATE_COMPLETED",
506     [QEVENT_GUEST_PANICKED] = "GUEST_PANICKED",
507 };
508 QEMU_BUILD_BUG_ON(ARRAY_SIZE(monitor_event_names) != QEVENT_MAX)
509
510 MonitorEventState monitor_event_state[QEVENT_MAX];
511
512 /*
513  * Emits the event to every monitor instance
514  */
515 static void
516 monitor_protocol_event_emit(MonitorEvent event,
517                             QObject *data)
518 {
519     Monitor *mon;
520
521     trace_monitor_protocol_event_emit(event, data);
522     QLIST_FOREACH(mon, &mon_list, entry) {
523         if (monitor_ctrl_mode(mon) && qmp_cmd_mode(mon)) {
524             monitor_json_emitter(mon, data);
525         }
526     }
527 }
528
529
530 /*
531  * Queue a new event for emission to Monitor instances,
532  * applying any rate limiting if required.
533  */
534 static void
535 monitor_protocol_event_queue(MonitorEvent event,
536                              QObject *data)
537 {
538     MonitorEventState *evstate;
539     int64_t now = qemu_get_clock_ns(rt_clock);
540     assert(event < QEVENT_MAX);
541
542     evstate = &(monitor_event_state[event]);
543     trace_monitor_protocol_event_queue(event,
544                                        data,
545                                        evstate->rate,
546                                        evstate->last,
547                                        now);
548
549     /* Rate limit of 0 indicates no throttling */
550     if (!evstate->rate) {
551         monitor_protocol_event_emit(event, data);
552         evstate->last = now;
553     } else {
554         int64_t delta = now - evstate->last;
555         if (evstate->data ||
556             delta < evstate->rate) {
557             /* If there's an existing event pending, replace
558              * it with the new event, otherwise schedule a
559              * timer for delayed emission
560              */
561             if (evstate->data) {
562                 qobject_decref(evstate->data);
563             } else {
564                 int64_t then = evstate->last + evstate->rate;
565                 qemu_mod_timer_ns(evstate->timer, then);
566             }
567             evstate->data = data;
568             qobject_incref(evstate->data);
569         } else {
570             monitor_protocol_event_emit(event, data);
571             evstate->last = now;
572         }
573     }
574 }
575
576
577 /*
578  * The callback invoked by QemuTimer when a delayed
579  * event is ready to be emitted
580  */
581 static void monitor_protocol_event_handler(void *opaque)
582 {
583     MonitorEventState *evstate = opaque;
584     int64_t now = qemu_get_clock_ns(rt_clock);
585
586
587     trace_monitor_protocol_event_handler(evstate->event,
588                                          evstate->data,
589                                          evstate->last,
590                                          now);
591     if (evstate->data) {
592         monitor_protocol_event_emit(evstate->event, evstate->data);
593         qobject_decref(evstate->data);
594         evstate->data = NULL;
595     }
596     evstate->last = now;
597 }
598
599
600 /*
601  * @event: the event ID to be limited
602  * @rate: the rate limit in milliseconds
603  *
604  * Sets a rate limit on a particular event, so no
605  * more than 1 event will be emitted within @rate
606  * milliseconds
607  */
608 static void
609 monitor_protocol_event_throttle(MonitorEvent event,
610                                 int64_t rate)
611 {
612     MonitorEventState *evstate;
613     assert(event < QEVENT_MAX);
614
615     evstate = &(monitor_event_state[event]);
616
617     trace_monitor_protocol_event_throttle(event, rate);
618     evstate->event = event;
619     evstate->rate = rate * SCALE_MS;
620     evstate->timer = qemu_new_timer(rt_clock,
621                                     SCALE_MS,
622                                     monitor_protocol_event_handler,
623                                     evstate);
624     evstate->last = 0;
625     evstate->data = NULL;
626 }
627
628
629 /* Global, one-time initializer to configure the rate limiting
630  * and initialize state */
631 static void monitor_protocol_event_init(void)
632 {
633     /* Limit RTC & BALLOON events to 1 per second */
634     monitor_protocol_event_throttle(QEVENT_RTC_CHANGE, 1000);
635     monitor_protocol_event_throttle(QEVENT_BALLOON_CHANGE, 1000);
636     monitor_protocol_event_throttle(QEVENT_WATCHDOG, 1000);
637 }
638
639 /**
640  * monitor_protocol_event(): Generate a Monitor event
641  *
642  * Event-specific data can be emitted through the (optional) 'data' parameter.
643  */
644 void monitor_protocol_event(MonitorEvent event, QObject *data)
645 {
646     QDict *qmp;
647     const char *event_name;
648
649     assert(event < QEVENT_MAX);
650
651     event_name = monitor_event_names[event];
652     assert(event_name != NULL);
653
654     qmp = qdict_new();
655     timestamp_put(qmp);
656     qdict_put(qmp, "event", qstring_from_str(event_name));
657     if (data) {
658         qobject_incref(data);
659         qdict_put_obj(qmp, "data", data);
660     }
661
662     trace_monitor_protocol_event(event, event_name, qmp);
663     monitor_protocol_event_queue(event, QOBJECT(qmp));
664     QDECREF(qmp);
665 }
666
667 static int do_qmp_capabilities(Monitor *mon, const QDict *params,
668                                QObject **ret_data)
669 {
670     /* Will setup QMP capabilities in the future */
671     if (monitor_ctrl_mode(mon)) {
672         mon->mc->command_mode = 1;
673     }
674
675     return 0;
676 }
677
678 static void handle_user_command(Monitor *mon, const char *cmdline);
679
680 char *qmp_human_monitor_command(const char *command_line, bool has_cpu_index,
681                                 int64_t cpu_index, Error **errp)
682 {
683     char *output = NULL;
684     Monitor *old_mon, hmp;
685
686     memset(&hmp, 0, sizeof(hmp));
687     hmp.outbuf = qstring_new();
688     hmp.skip_flush = true;
689
690     old_mon = cur_mon;
691     cur_mon = &hmp;
692
693     if (has_cpu_index) {
694         int ret = monitor_set_cpu(cpu_index);
695         if (ret < 0) {
696             cur_mon = old_mon;
697             error_set(errp, QERR_INVALID_PARAMETER_VALUE, "cpu-index",
698                       "a CPU number");
699             goto out;
700         }
701     }
702
703     handle_user_command(&hmp, command_line);
704     cur_mon = old_mon;
705
706     if (qstring_get_length(hmp.outbuf) > 0) {
707         output = g_strdup(qstring_get_str(hmp.outbuf));
708     } else {
709         output = g_strdup("");
710     }
711
712 out:
713     QDECREF(hmp.outbuf);
714     return output;
715 }
716
717 static int compare_cmd(const char *name, const char *list)
718 {
719     const char *p, *pstart;
720     int len;
721     len = strlen(name);
722     p = list;
723     for(;;) {
724         pstart = p;
725         p = strchr(p, '|');
726         if (!p)
727             p = pstart + strlen(pstart);
728         if ((p - pstart) == len && !memcmp(pstart, name, len))
729             return 1;
730         if (*p == '\0')
731             break;
732         p++;
733     }
734     return 0;
735 }
736
737 static void help_cmd_dump(Monitor *mon, const mon_cmd_t *cmds,
738                           const char *prefix, const char *name)
739 {
740     const mon_cmd_t *cmd;
741
742     for(cmd = cmds; cmd->name != NULL; cmd++) {
743         if (!name || !strcmp(name, cmd->name))
744             monitor_printf(mon, "%s%s %s -- %s\n", prefix, cmd->name,
745                            cmd->params, cmd->help);
746     }
747 }
748
749 static void help_cmd(Monitor *mon, const char *name)
750 {
751     if (name && !strcmp(name, "info")) {
752         help_cmd_dump(mon, info_cmds, "info ", NULL);
753     } else {
754         help_cmd_dump(mon, mon_cmds, "", name);
755         if (name && !strcmp(name, "log")) {
756             const QEMULogItem *item;
757             monitor_printf(mon, "Log items (comma separated):\n");
758             monitor_printf(mon, "%-10s %s\n", "none", "remove all logs");
759             for (item = qemu_log_items; item->mask != 0; item++) {
760                 monitor_printf(mon, "%-10s %s\n", item->name, item->help);
761             }
762         }
763     }
764 }
765
766 static void do_help_cmd(Monitor *mon, const QDict *qdict)
767 {
768     help_cmd(mon, qdict_get_try_str(qdict, "name"));
769 }
770
771 static void do_trace_event_set_state(Monitor *mon, const QDict *qdict)
772 {
773     const char *tp_name = qdict_get_str(qdict, "name");
774     bool new_state = qdict_get_bool(qdict, "option");
775
776     bool found = false;
777     TraceEvent *ev = NULL;
778     while ((ev = trace_event_pattern(tp_name, ev)) != NULL) {
779         found = true;
780         if (!trace_event_get_state_static(ev)) {
781             monitor_printf(mon, "event \"%s\" is not traceable\n", tp_name);
782         } else {
783             trace_event_set_state_dynamic(ev, new_state);
784         }
785     }
786     if (!trace_event_is_pattern(tp_name) && !found) {
787         monitor_printf(mon, "unknown event name \"%s\"\n", tp_name);
788     }
789 }
790
791 #ifdef CONFIG_TRACE_SIMPLE
792 static void do_trace_file(Monitor *mon, const QDict *qdict)
793 {
794     const char *op = qdict_get_try_str(qdict, "op");
795     const char *arg = qdict_get_try_str(qdict, "arg");
796
797     if (!op) {
798         st_print_trace_file_status((FILE *)mon, &monitor_fprintf);
799     } else if (!strcmp(op, "on")) {
800         st_set_trace_file_enabled(true);
801     } else if (!strcmp(op, "off")) {
802         st_set_trace_file_enabled(false);
803     } else if (!strcmp(op, "flush")) {
804         st_flush_trace_buffer();
805     } else if (!strcmp(op, "set")) {
806         if (arg) {
807             st_set_trace_file(arg);
808         }
809     } else {
810         monitor_printf(mon, "unexpected argument \"%s\"\n", op);
811         help_cmd(mon, "trace-file");
812     }
813 }
814 #endif
815
816 static void user_monitor_complete(void *opaque, QObject *ret_data)
817 {
818     MonitorCompletionData *data = (MonitorCompletionData *)opaque; 
819
820     if (ret_data) {
821         data->user_print(data->mon, ret_data);
822     }
823     monitor_resume(data->mon);
824     g_free(data);
825 }
826
827 static void qmp_monitor_complete(void *opaque, QObject *ret_data)
828 {
829     monitor_protocol_emitter(opaque, ret_data);
830 }
831
832 static int qmp_async_cmd_handler(Monitor *mon, const mon_cmd_t *cmd,
833                                  const QDict *params)
834 {
835     return cmd->mhandler.cmd_async(mon, params, qmp_monitor_complete, mon);
836 }
837
838 static void user_async_cmd_handler(Monitor *mon, const mon_cmd_t *cmd,
839                                    const QDict *params)
840 {
841     int ret;
842
843     MonitorCompletionData *cb_data = g_malloc(sizeof(*cb_data));
844     cb_data->mon = mon;
845     cb_data->user_print = cmd->user_print;
846     monitor_suspend(mon);
847     ret = cmd->mhandler.cmd_async(mon, params,
848                                   user_monitor_complete, cb_data);
849     if (ret < 0) {
850         monitor_resume(mon);
851         g_free(cb_data);
852     }
853 }
854
855 static void do_info_help(Monitor *mon, const QDict *qdict)
856 {
857     help_cmd(mon, "info");
858 }
859
860 CommandInfoList *qmp_query_commands(Error **errp)
861 {
862     CommandInfoList *info, *cmd_list = NULL;
863     const mon_cmd_t *cmd;
864
865     for (cmd = qmp_cmds; cmd->name != NULL; cmd++) {
866         info = g_malloc0(sizeof(*info));
867         info->value = g_malloc0(sizeof(*info->value));
868         info->value->name = g_strdup(cmd->name);
869
870         info->next = cmd_list;
871         cmd_list = info;
872     }
873
874     return cmd_list;
875 }
876
877 EventInfoList *qmp_query_events(Error **errp)
878 {
879     EventInfoList *info, *ev_list = NULL;
880     MonitorEvent e;
881
882     for (e = 0 ; e < QEVENT_MAX ; e++) {
883         const char *event_name = monitor_event_names[e];
884         assert(event_name != NULL);
885         info = g_malloc0(sizeof(*info));
886         info->value = g_malloc0(sizeof(*info->value));
887         info->value->name = g_strdup(event_name);
888
889         info->next = ev_list;
890         ev_list = info;
891     }
892
893     return ev_list;
894 }
895
896 /* set the current CPU defined by the user */
897 int monitor_set_cpu(int cpu_index)
898 {
899     CPUState *cpu;
900
901     cpu = qemu_get_cpu(cpu_index);
902     if (cpu == NULL) {
903         return -1;
904     }
905     cur_mon->mon_cpu = cpu;
906     return 0;
907 }
908
909 static CPUArchState *mon_get_cpu(void)
910 {
911     if (!cur_mon->mon_cpu) {
912         monitor_set_cpu(0);
913     }
914     cpu_synchronize_state(cur_mon->mon_cpu);
915     return cur_mon->mon_cpu->env_ptr;
916 }
917
918 int monitor_get_cpu_index(void)
919 {
920     CPUState *cpu = ENV_GET_CPU(mon_get_cpu());
921     return cpu->cpu_index;
922 }
923
924 static void do_info_registers(Monitor *mon, const QDict *qdict)
925 {
926     CPUState *cpu;
927     CPUArchState *env;
928     env = mon_get_cpu();
929     cpu = ENV_GET_CPU(env);
930     cpu_dump_state(cpu, (FILE *)mon, monitor_fprintf, CPU_DUMP_FPU);
931 }
932
933 static void do_info_jit(Monitor *mon, const QDict *qdict)
934 {
935     dump_exec_info((FILE *)mon, monitor_fprintf);
936 }
937
938 static void do_info_history(Monitor *mon, const QDict *qdict)
939 {
940     int i;
941     const char *str;
942
943     if (!mon->rs)
944         return;
945     i = 0;
946     for(;;) {
947         str = readline_get_history(mon->rs, i);
948         if (!str)
949             break;
950         monitor_printf(mon, "%d: '%s'\n", i, str);
951         i++;
952     }
953 }
954
955 static void do_info_cpu_stats(Monitor *mon, const QDict *qdict)
956 {
957     CPUState *cpu;
958     CPUArchState *env;
959
960     env = mon_get_cpu();
961     cpu = ENV_GET_CPU(env);
962     cpu_dump_statistics(cpu, (FILE *)mon, &monitor_fprintf, 0);
963 }
964
965 static void do_trace_print_events(Monitor *mon, const QDict *qdict)
966 {
967     trace_print_events((FILE *)mon, &monitor_fprintf);
968 }
969
970 static int client_migrate_info(Monitor *mon, const QDict *qdict,
971                                MonitorCompletion cb, void *opaque)
972 {
973     const char *protocol = qdict_get_str(qdict, "protocol");
974     const char *hostname = qdict_get_str(qdict, "hostname");
975     const char *subject  = qdict_get_try_str(qdict, "cert-subject");
976     int port             = qdict_get_try_int(qdict, "port", -1);
977     int tls_port         = qdict_get_try_int(qdict, "tls-port", -1);
978     int ret;
979
980     if (strcmp(protocol, "spice") == 0) {
981         if (!using_spice) {
982             qerror_report(QERR_DEVICE_NOT_ACTIVE, "spice");
983             return -1;
984         }
985
986         if (port == -1 && tls_port == -1) {
987             qerror_report(QERR_MISSING_PARAMETER, "port/tls-port");
988             return -1;
989         }
990
991         ret = qemu_spice_migrate_info(hostname, port, tls_port, subject,
992                                       cb, opaque);
993         if (ret != 0) {
994             qerror_report(QERR_UNDEFINED_ERROR);
995             return -1;
996         }
997         return 0;
998     }
999
1000     qerror_report(QERR_INVALID_PARAMETER, "protocol");
1001     return -1;
1002 }
1003
1004 static void do_logfile(Monitor *mon, const QDict *qdict)
1005 {
1006     qemu_set_log_filename(qdict_get_str(qdict, "filename"));
1007 }
1008
1009 static void do_log(Monitor *mon, const QDict *qdict)
1010 {
1011     int mask;
1012     const char *items = qdict_get_str(qdict, "items");
1013
1014     if (!strcmp(items, "none")) {
1015         mask = 0;
1016     } else {
1017         mask = qemu_str_to_log_mask(items);
1018         if (!mask) {
1019             help_cmd(mon, "log");
1020             return;
1021         }
1022     }
1023     qemu_set_log(mask);
1024 }
1025
1026 static void do_singlestep(Monitor *mon, const QDict *qdict)
1027 {
1028     const char *option = qdict_get_try_str(qdict, "option");
1029     if (!option || !strcmp(option, "on")) {
1030         singlestep = 1;
1031     } else if (!strcmp(option, "off")) {
1032         singlestep = 0;
1033     } else {
1034         monitor_printf(mon, "unexpected option %s\n", option);
1035     }
1036 }
1037
1038 static void do_gdbserver(Monitor *mon, const QDict *qdict)
1039 {
1040     const char *device = qdict_get_try_str(qdict, "device");
1041     if (!device)
1042         device = "tcp::" DEFAULT_GDBSTUB_PORT;
1043     if (gdbserver_start(device) < 0) {
1044         monitor_printf(mon, "Could not open gdbserver on device '%s'\n",
1045                        device);
1046     } else if (strcmp(device, "none") == 0) {
1047         monitor_printf(mon, "Disabled gdbserver\n");
1048     } else {
1049         monitor_printf(mon, "Waiting for gdb connection on device '%s'\n",
1050                        device);
1051     }
1052 }
1053
1054 static void do_watchdog_action(Monitor *mon, const QDict *qdict)
1055 {
1056     const char *action = qdict_get_str(qdict, "action");
1057     if (select_watchdog_action(action) == -1) {
1058         monitor_printf(mon, "Unknown watchdog action '%s'\n", action);
1059     }
1060 }
1061
1062 static void monitor_printc(Monitor *mon, int c)
1063 {
1064     monitor_printf(mon, "'");
1065     switch(c) {
1066     case '\'':
1067         monitor_printf(mon, "\\'");
1068         break;
1069     case '\\':
1070         monitor_printf(mon, "\\\\");
1071         break;
1072     case '\n':
1073         monitor_printf(mon, "\\n");
1074         break;
1075     case '\r':
1076         monitor_printf(mon, "\\r");
1077         break;
1078     default:
1079         if (c >= 32 && c <= 126) {
1080             monitor_printf(mon, "%c", c);
1081         } else {
1082             monitor_printf(mon, "\\x%02x", c);
1083         }
1084         break;
1085     }
1086     monitor_printf(mon, "'");
1087 }
1088
1089 static void memory_dump(Monitor *mon, int count, int format, int wsize,
1090                         hwaddr addr, int is_physical)
1091 {
1092     CPUArchState *env;
1093     int l, line_size, i, max_digits, len;
1094     uint8_t buf[16];
1095     uint64_t v;
1096
1097     if (format == 'i') {
1098         int flags;
1099         flags = 0;
1100         env = mon_get_cpu();
1101 #ifdef TARGET_I386
1102         if (wsize == 2) {
1103             flags = 1;
1104         } else if (wsize == 4) {
1105             flags = 0;
1106         } else {
1107             /* as default we use the current CS size */
1108             flags = 0;
1109             if (env) {
1110 #ifdef TARGET_X86_64
1111                 if ((env->efer & MSR_EFER_LMA) &&
1112                     (env->segs[R_CS].flags & DESC_L_MASK))
1113                     flags = 2;
1114                 else
1115 #endif
1116                 if (!(env->segs[R_CS].flags & DESC_B_MASK))
1117                     flags = 1;
1118             }
1119         }
1120 #endif
1121         monitor_disas(mon, env, addr, count, is_physical, flags);
1122         return;
1123     }
1124
1125     len = wsize * count;
1126     if (wsize == 1)
1127         line_size = 8;
1128     else
1129         line_size = 16;
1130     max_digits = 0;
1131
1132     switch(format) {
1133     case 'o':
1134         max_digits = (wsize * 8 + 2) / 3;
1135         break;
1136     default:
1137     case 'x':
1138         max_digits = (wsize * 8) / 4;
1139         break;
1140     case 'u':
1141     case 'd':
1142         max_digits = (wsize * 8 * 10 + 32) / 33;
1143         break;
1144     case 'c':
1145         wsize = 1;
1146         break;
1147     }
1148
1149     while (len > 0) {
1150         if (is_physical)
1151             monitor_printf(mon, TARGET_FMT_plx ":", addr);
1152         else
1153             monitor_printf(mon, TARGET_FMT_lx ":", (target_ulong)addr);
1154         l = len;
1155         if (l > line_size)
1156             l = line_size;
1157         if (is_physical) {
1158             cpu_physical_memory_read(addr, buf, l);
1159         } else {
1160             env = mon_get_cpu();
1161             if (cpu_memory_rw_debug(ENV_GET_CPU(env), addr, buf, l, 0) < 0) {
1162                 monitor_printf(mon, " Cannot access memory\n");
1163                 break;
1164             }
1165         }
1166         i = 0;
1167         while (i < l) {
1168             switch(wsize) {
1169             default:
1170             case 1:
1171                 v = ldub_raw(buf + i);
1172                 break;
1173             case 2:
1174                 v = lduw_raw(buf + i);
1175                 break;
1176             case 4:
1177                 v = (uint32_t)ldl_raw(buf + i);
1178                 break;
1179             case 8:
1180                 v = ldq_raw(buf + i);
1181                 break;
1182             }
1183             monitor_printf(mon, " ");
1184             switch(format) {
1185             case 'o':
1186                 monitor_printf(mon, "%#*" PRIo64, max_digits, v);
1187                 break;
1188             case 'x':
1189                 monitor_printf(mon, "0x%0*" PRIx64, max_digits, v);
1190                 break;
1191             case 'u':
1192                 monitor_printf(mon, "%*" PRIu64, max_digits, v);
1193                 break;
1194             case 'd':
1195                 monitor_printf(mon, "%*" PRId64, max_digits, v);
1196                 break;
1197             case 'c':
1198                 monitor_printc(mon, v);
1199                 break;
1200             }
1201             i += wsize;
1202         }
1203         monitor_printf(mon, "\n");
1204         addr += l;
1205         len -= l;
1206     }
1207 }
1208
1209 static void do_memory_dump(Monitor *mon, const QDict *qdict)
1210 {
1211     int count = qdict_get_int(qdict, "count");
1212     int format = qdict_get_int(qdict, "format");
1213     int size = qdict_get_int(qdict, "size");
1214     target_long addr = qdict_get_int(qdict, "addr");
1215
1216     memory_dump(mon, count, format, size, addr, 0);
1217 }
1218
1219 static void do_physical_memory_dump(Monitor *mon, const QDict *qdict)
1220 {
1221     int count = qdict_get_int(qdict, "count");
1222     int format = qdict_get_int(qdict, "format");
1223     int size = qdict_get_int(qdict, "size");
1224     hwaddr addr = qdict_get_int(qdict, "addr");
1225
1226     memory_dump(mon, count, format, size, addr, 1);
1227 }
1228
1229 static void do_print(Monitor *mon, const QDict *qdict)
1230 {
1231     int format = qdict_get_int(qdict, "format");
1232     hwaddr val = qdict_get_int(qdict, "val");
1233
1234     switch(format) {
1235     case 'o':
1236         monitor_printf(mon, "%#" HWADDR_PRIo, val);
1237         break;
1238     case 'x':
1239         monitor_printf(mon, "%#" HWADDR_PRIx, val);
1240         break;
1241     case 'u':
1242         monitor_printf(mon, "%" HWADDR_PRIu, val);
1243         break;
1244     default:
1245     case 'd':
1246         monitor_printf(mon, "%" HWADDR_PRId, val);
1247         break;
1248     case 'c':
1249         monitor_printc(mon, val);
1250         break;
1251     }
1252     monitor_printf(mon, "\n");
1253 }
1254
1255 static void do_sum(Monitor *mon, const QDict *qdict)
1256 {
1257     uint32_t addr;
1258     uint16_t sum;
1259     uint32_t start = qdict_get_int(qdict, "start");
1260     uint32_t size = qdict_get_int(qdict, "size");
1261
1262     sum = 0;
1263     for(addr = start; addr < (start + size); addr++) {
1264         uint8_t val = ldub_phys(addr);
1265         /* BSD sum algorithm ('sum' Unix command) */
1266         sum = (sum >> 1) | (sum << 15);
1267         sum += val;
1268     }
1269     monitor_printf(mon, "%05d\n", sum);
1270 }
1271
1272 static int mouse_button_state;
1273
1274 static void do_mouse_move(Monitor *mon, const QDict *qdict)
1275 {
1276     int dx, dy, dz;
1277     const char *dx_str = qdict_get_str(qdict, "dx_str");
1278     const char *dy_str = qdict_get_str(qdict, "dy_str");
1279     const char *dz_str = qdict_get_try_str(qdict, "dz_str");
1280     dx = strtol(dx_str, NULL, 0);
1281     dy = strtol(dy_str, NULL, 0);
1282     dz = 0;
1283     if (dz_str)
1284         dz = strtol(dz_str, NULL, 0);
1285     kbd_mouse_event(dx, dy, dz, mouse_button_state);
1286 }
1287
1288 static void do_mouse_button(Monitor *mon, const QDict *qdict)
1289 {
1290     int button_state = qdict_get_int(qdict, "button_state");
1291     mouse_button_state = button_state;
1292     kbd_mouse_event(0, 0, 0, mouse_button_state);
1293 }
1294
1295 static void do_ioport_read(Monitor *mon, const QDict *qdict)
1296 {
1297     int size = qdict_get_int(qdict, "size");
1298     int addr = qdict_get_int(qdict, "addr");
1299     int has_index = qdict_haskey(qdict, "index");
1300     uint32_t val;
1301     int suffix;
1302
1303     if (has_index) {
1304         int index = qdict_get_int(qdict, "index");
1305         cpu_outb(addr & IOPORTS_MASK, index & 0xff);
1306         addr++;
1307     }
1308     addr &= 0xffff;
1309
1310     switch(size) {
1311     default:
1312     case 1:
1313         val = cpu_inb(addr);
1314         suffix = 'b';
1315         break;
1316     case 2:
1317         val = cpu_inw(addr);
1318         suffix = 'w';
1319         break;
1320     case 4:
1321         val = cpu_inl(addr);
1322         suffix = 'l';
1323         break;
1324     }
1325     monitor_printf(mon, "port%c[0x%04x] = %#0*x\n",
1326                    suffix, addr, size * 2, val);
1327 }
1328
1329 static void do_ioport_write(Monitor *mon, const QDict *qdict)
1330 {
1331     int size = qdict_get_int(qdict, "size");
1332     int addr = qdict_get_int(qdict, "addr");
1333     int val = qdict_get_int(qdict, "val");
1334
1335     addr &= IOPORTS_MASK;
1336
1337     switch (size) {
1338     default:
1339     case 1:
1340         cpu_outb(addr, val);
1341         break;
1342     case 2:
1343         cpu_outw(addr, val);
1344         break;
1345     case 4:
1346         cpu_outl(addr, val);
1347         break;
1348     }
1349 }
1350
1351 static void do_boot_set(Monitor *mon, const QDict *qdict)
1352 {
1353     int res;
1354     const char *bootdevice = qdict_get_str(qdict, "bootdevice");
1355
1356     res = qemu_boot_set(bootdevice);
1357     if (res == 0) {
1358         monitor_printf(mon, "boot device list now set to %s\n", bootdevice);
1359     } else if (res > 0) {
1360         monitor_printf(mon, "setting boot device list failed\n");
1361     } else {
1362         monitor_printf(mon, "no function defined to set boot device list for "
1363                        "this architecture\n");
1364     }
1365 }
1366
1367 #if defined(TARGET_I386)
1368 static void print_pte(Monitor *mon, hwaddr addr,
1369                       hwaddr pte,
1370                       hwaddr mask)
1371 {
1372 #ifdef TARGET_X86_64
1373     if (addr & (1ULL << 47)) {
1374         addr |= -1LL << 48;
1375     }
1376 #endif
1377     monitor_printf(mon, TARGET_FMT_plx ": " TARGET_FMT_plx
1378                    " %c%c%c%c%c%c%c%c%c\n",
1379                    addr,
1380                    pte & mask,
1381                    pte & PG_NX_MASK ? 'X' : '-',
1382                    pte & PG_GLOBAL_MASK ? 'G' : '-',
1383                    pte & PG_PSE_MASK ? 'P' : '-',
1384                    pte & PG_DIRTY_MASK ? 'D' : '-',
1385                    pte & PG_ACCESSED_MASK ? 'A' : '-',
1386                    pte & PG_PCD_MASK ? 'C' : '-',
1387                    pte & PG_PWT_MASK ? 'T' : '-',
1388                    pte & PG_USER_MASK ? 'U' : '-',
1389                    pte & PG_RW_MASK ? 'W' : '-');
1390 }
1391
1392 static void tlb_info_32(Monitor *mon, CPUArchState *env)
1393 {
1394     unsigned int l1, l2;
1395     uint32_t pgd, pde, pte;
1396
1397     pgd = env->cr[3] & ~0xfff;
1398     for(l1 = 0; l1 < 1024; l1++) {
1399         cpu_physical_memory_read(pgd + l1 * 4, &pde, 4);
1400         pde = le32_to_cpu(pde);
1401         if (pde & PG_PRESENT_MASK) {
1402             if ((pde & PG_PSE_MASK) && (env->cr[4] & CR4_PSE_MASK)) {
1403                 /* 4M pages */
1404                 print_pte(mon, (l1 << 22), pde, ~((1 << 21) - 1));
1405             } else {
1406                 for(l2 = 0; l2 < 1024; l2++) {
1407                     cpu_physical_memory_read((pde & ~0xfff) + l2 * 4, &pte, 4);
1408                     pte = le32_to_cpu(pte);
1409                     if (pte & PG_PRESENT_MASK) {
1410                         print_pte(mon, (l1 << 22) + (l2 << 12),
1411                                   pte & ~PG_PSE_MASK,
1412                                   ~0xfff);
1413                     }
1414                 }
1415             }
1416         }
1417     }
1418 }
1419
1420 static void tlb_info_pae32(Monitor *mon, CPUArchState *env)
1421 {
1422     unsigned int l1, l2, l3;
1423     uint64_t pdpe, pde, pte;
1424     uint64_t pdp_addr, pd_addr, pt_addr;
1425
1426     pdp_addr = env->cr[3] & ~0x1f;
1427     for (l1 = 0; l1 < 4; l1++) {
1428         cpu_physical_memory_read(pdp_addr + l1 * 8, &pdpe, 8);
1429         pdpe = le64_to_cpu(pdpe);
1430         if (pdpe & PG_PRESENT_MASK) {
1431             pd_addr = pdpe & 0x3fffffffff000ULL;
1432             for (l2 = 0; l2 < 512; l2++) {
1433                 cpu_physical_memory_read(pd_addr + l2 * 8, &pde, 8);
1434                 pde = le64_to_cpu(pde);
1435                 if (pde & PG_PRESENT_MASK) {
1436                     if (pde & PG_PSE_MASK) {
1437                         /* 2M pages with PAE, CR4.PSE is ignored */
1438                         print_pte(mon, (l1 << 30 ) + (l2 << 21), pde,
1439                                   ~((hwaddr)(1 << 20) - 1));
1440                     } else {
1441                         pt_addr = pde & 0x3fffffffff000ULL;
1442                         for (l3 = 0; l3 < 512; l3++) {
1443                             cpu_physical_memory_read(pt_addr + l3 * 8, &pte, 8);
1444                             pte = le64_to_cpu(pte);
1445                             if (pte & PG_PRESENT_MASK) {
1446                                 print_pte(mon, (l1 << 30 ) + (l2 << 21)
1447                                           + (l3 << 12),
1448                                           pte & ~PG_PSE_MASK,
1449                                           ~(hwaddr)0xfff);
1450                             }
1451                         }
1452                     }
1453                 }
1454             }
1455         }
1456     }
1457 }
1458
1459 #ifdef TARGET_X86_64
1460 static void tlb_info_64(Monitor *mon, CPUArchState *env)
1461 {
1462     uint64_t l1, l2, l3, l4;
1463     uint64_t pml4e, pdpe, pde, pte;
1464     uint64_t pml4_addr, pdp_addr, pd_addr, pt_addr;
1465
1466     pml4_addr = env->cr[3] & 0x3fffffffff000ULL;
1467     for (l1 = 0; l1 < 512; l1++) {
1468         cpu_physical_memory_read(pml4_addr + l1 * 8, &pml4e, 8);
1469         pml4e = le64_to_cpu(pml4e);
1470         if (pml4e & PG_PRESENT_MASK) {
1471             pdp_addr = pml4e & 0x3fffffffff000ULL;
1472             for (l2 = 0; l2 < 512; l2++) {
1473                 cpu_physical_memory_read(pdp_addr + l2 * 8, &pdpe, 8);
1474                 pdpe = le64_to_cpu(pdpe);
1475                 if (pdpe & PG_PRESENT_MASK) {
1476                     if (pdpe & PG_PSE_MASK) {
1477                         /* 1G pages, CR4.PSE is ignored */
1478                         print_pte(mon, (l1 << 39) + (l2 << 30), pdpe,
1479                                   0x3ffffc0000000ULL);
1480                     } else {
1481                         pd_addr = pdpe & 0x3fffffffff000ULL;
1482                         for (l3 = 0; l3 < 512; l3++) {
1483                             cpu_physical_memory_read(pd_addr + l3 * 8, &pde, 8);
1484                             pde = le64_to_cpu(pde);
1485                             if (pde & PG_PRESENT_MASK) {
1486                                 if (pde & PG_PSE_MASK) {
1487                                     /* 2M pages, CR4.PSE is ignored */
1488                                     print_pte(mon, (l1 << 39) + (l2 << 30) +
1489                                               (l3 << 21), pde,
1490                                               0x3ffffffe00000ULL);
1491                                 } else {
1492                                     pt_addr = pde & 0x3fffffffff000ULL;
1493                                     for (l4 = 0; l4 < 512; l4++) {
1494                                         cpu_physical_memory_read(pt_addr
1495                                                                  + l4 * 8,
1496                                                                  &pte, 8);
1497                                         pte = le64_to_cpu(pte);
1498                                         if (pte & PG_PRESENT_MASK) {
1499                                             print_pte(mon, (l1 << 39) +
1500                                                       (l2 << 30) +
1501                                                       (l3 << 21) + (l4 << 12),
1502                                                       pte & ~PG_PSE_MASK,
1503                                                       0x3fffffffff000ULL);
1504                                         }
1505                                     }
1506                                 }
1507                             }
1508                         }
1509                     }
1510                 }
1511             }
1512         }
1513     }
1514 }
1515 #endif
1516
1517 static void tlb_info(Monitor *mon, const QDict *qdict)
1518 {
1519     CPUArchState *env;
1520
1521     env = mon_get_cpu();
1522
1523     if (!(env->cr[0] & CR0_PG_MASK)) {
1524         monitor_printf(mon, "PG disabled\n");
1525         return;
1526     }
1527     if (env->cr[4] & CR4_PAE_MASK) {
1528 #ifdef TARGET_X86_64
1529         if (env->hflags & HF_LMA_MASK) {
1530             tlb_info_64(mon, env);
1531         } else
1532 #endif
1533         {
1534             tlb_info_pae32(mon, env);
1535         }
1536     } else {
1537         tlb_info_32(mon, env);
1538     }
1539 }
1540
1541 static void mem_print(Monitor *mon, hwaddr *pstart,
1542                       int *plast_prot,
1543                       hwaddr end, int prot)
1544 {
1545     int prot1;
1546     prot1 = *plast_prot;
1547     if (prot != prot1) {
1548         if (*pstart != -1) {
1549             monitor_printf(mon, TARGET_FMT_plx "-" TARGET_FMT_plx " "
1550                            TARGET_FMT_plx " %c%c%c\n",
1551                            *pstart, end, end - *pstart,
1552                            prot1 & PG_USER_MASK ? 'u' : '-',
1553                            'r',
1554                            prot1 & PG_RW_MASK ? 'w' : '-');
1555         }
1556         if (prot != 0)
1557             *pstart = end;
1558         else
1559             *pstart = -1;
1560         *plast_prot = prot;
1561     }
1562 }
1563
1564 static void mem_info_32(Monitor *mon, CPUArchState *env)
1565 {
1566     unsigned int l1, l2;
1567     int prot, last_prot;
1568     uint32_t pgd, pde, pte;
1569     hwaddr start, end;
1570
1571     pgd = env->cr[3] & ~0xfff;
1572     last_prot = 0;
1573     start = -1;
1574     for(l1 = 0; l1 < 1024; l1++) {
1575         cpu_physical_memory_read(pgd + l1 * 4, &pde, 4);
1576         pde = le32_to_cpu(pde);
1577         end = l1 << 22;
1578         if (pde & PG_PRESENT_MASK) {
1579             if ((pde & PG_PSE_MASK) && (env->cr[4] & CR4_PSE_MASK)) {
1580                 prot = pde & (PG_USER_MASK | PG_RW_MASK | PG_PRESENT_MASK);
1581                 mem_print(mon, &start, &last_prot, end, prot);
1582             } else {
1583                 for(l2 = 0; l2 < 1024; l2++) {
1584                     cpu_physical_memory_read((pde & ~0xfff) + l2 * 4, &pte, 4);
1585                     pte = le32_to_cpu(pte);
1586                     end = (l1 << 22) + (l2 << 12);
1587                     if (pte & PG_PRESENT_MASK) {
1588                         prot = pte & pde &
1589                             (PG_USER_MASK | PG_RW_MASK | PG_PRESENT_MASK);
1590                     } else {
1591                         prot = 0;
1592                     }
1593                     mem_print(mon, &start, &last_prot, end, prot);
1594                 }
1595             }
1596         } else {
1597             prot = 0;
1598             mem_print(mon, &start, &last_prot, end, prot);
1599         }
1600     }
1601     /* Flush last range */
1602     mem_print(mon, &start, &last_prot, (hwaddr)1 << 32, 0);
1603 }
1604
1605 static void mem_info_pae32(Monitor *mon, CPUArchState *env)
1606 {
1607     unsigned int l1, l2, l3;
1608     int prot, last_prot;
1609     uint64_t pdpe, pde, pte;
1610     uint64_t pdp_addr, pd_addr, pt_addr;
1611     hwaddr start, end;
1612
1613     pdp_addr = env->cr[3] & ~0x1f;
1614     last_prot = 0;
1615     start = -1;
1616     for (l1 = 0; l1 < 4; l1++) {
1617         cpu_physical_memory_read(pdp_addr + l1 * 8, &pdpe, 8);
1618         pdpe = le64_to_cpu(pdpe);
1619         end = l1 << 30;
1620         if (pdpe & PG_PRESENT_MASK) {
1621             pd_addr = pdpe & 0x3fffffffff000ULL;
1622             for (l2 = 0; l2 < 512; l2++) {
1623                 cpu_physical_memory_read(pd_addr + l2 * 8, &pde, 8);
1624                 pde = le64_to_cpu(pde);
1625                 end = (l1 << 30) + (l2 << 21);
1626                 if (pde & PG_PRESENT_MASK) {
1627                     if (pde & PG_PSE_MASK) {
1628                         prot = pde & (PG_USER_MASK | PG_RW_MASK |
1629                                       PG_PRESENT_MASK);
1630                         mem_print(mon, &start, &last_prot, end, prot);
1631                     } else {
1632                         pt_addr = pde & 0x3fffffffff000ULL;
1633                         for (l3 = 0; l3 < 512; l3++) {
1634                             cpu_physical_memory_read(pt_addr + l3 * 8, &pte, 8);
1635                             pte = le64_to_cpu(pte);
1636                             end = (l1 << 30) + (l2 << 21) + (l3 << 12);
1637                             if (pte & PG_PRESENT_MASK) {
1638                                 prot = pte & pde & (PG_USER_MASK | PG_RW_MASK |
1639                                                     PG_PRESENT_MASK);
1640                             } else {
1641                                 prot = 0;
1642                             }
1643                             mem_print(mon, &start, &last_prot, end, prot);
1644                         }
1645                     }
1646                 } else {
1647                     prot = 0;
1648                     mem_print(mon, &start, &last_prot, end, prot);
1649                 }
1650             }
1651         } else {
1652             prot = 0;
1653             mem_print(mon, &start, &last_prot, end, prot);
1654         }
1655     }
1656     /* Flush last range */
1657     mem_print(mon, &start, &last_prot, (hwaddr)1 << 32, 0);
1658 }
1659
1660
1661 #ifdef TARGET_X86_64
1662 static void mem_info_64(Monitor *mon, CPUArchState *env)
1663 {
1664     int prot, last_prot;
1665     uint64_t l1, l2, l3, l4;
1666     uint64_t pml4e, pdpe, pde, pte;
1667     uint64_t pml4_addr, pdp_addr, pd_addr, pt_addr, start, end;
1668
1669     pml4_addr = env->cr[3] & 0x3fffffffff000ULL;
1670     last_prot = 0;
1671     start = -1;
1672     for (l1 = 0; l1 < 512; l1++) {
1673         cpu_physical_memory_read(pml4_addr + l1 * 8, &pml4e, 8);
1674         pml4e = le64_to_cpu(pml4e);
1675         end = l1 << 39;
1676         if (pml4e & PG_PRESENT_MASK) {
1677             pdp_addr = pml4e & 0x3fffffffff000ULL;
1678             for (l2 = 0; l2 < 512; l2++) {
1679                 cpu_physical_memory_read(pdp_addr + l2 * 8, &pdpe, 8);
1680                 pdpe = le64_to_cpu(pdpe);
1681                 end = (l1 << 39) + (l2 << 30);
1682                 if (pdpe & PG_PRESENT_MASK) {
1683                     if (pdpe & PG_PSE_MASK) {
1684                         prot = pdpe & (PG_USER_MASK | PG_RW_MASK |
1685                                        PG_PRESENT_MASK);
1686                         prot &= pml4e;
1687                         mem_print(mon, &start, &last_prot, end, prot);
1688                     } else {
1689                         pd_addr = pdpe & 0x3fffffffff000ULL;
1690                         for (l3 = 0; l3 < 512; l3++) {
1691                             cpu_physical_memory_read(pd_addr + l3 * 8, &pde, 8);
1692                             pde = le64_to_cpu(pde);
1693                             end = (l1 << 39) + (l2 << 30) + (l3 << 21);
1694                             if (pde & PG_PRESENT_MASK) {
1695                                 if (pde & PG_PSE_MASK) {
1696                                     prot = pde & (PG_USER_MASK | PG_RW_MASK |
1697                                                   PG_PRESENT_MASK);
1698                                     prot &= pml4e & pdpe;
1699                                     mem_print(mon, &start, &last_prot, end, prot);
1700                                 } else {
1701                                     pt_addr = pde & 0x3fffffffff000ULL;
1702                                     for (l4 = 0; l4 < 512; l4++) {
1703                                         cpu_physical_memory_read(pt_addr
1704                                                                  + l4 * 8,
1705                                                                  &pte, 8);
1706                                         pte = le64_to_cpu(pte);
1707                                         end = (l1 << 39) + (l2 << 30) +
1708                                             (l3 << 21) + (l4 << 12);
1709                                         if (pte & PG_PRESENT_MASK) {
1710                                             prot = pte & (PG_USER_MASK | PG_RW_MASK |
1711                                                           PG_PRESENT_MASK);
1712                                             prot &= pml4e & pdpe & pde;
1713                                         } else {
1714                                             prot = 0;
1715                                         }
1716                                         mem_print(mon, &start, &last_prot, end, prot);
1717                                     }
1718                                 }
1719                             } else {
1720                                 prot = 0;
1721                                 mem_print(mon, &start, &last_prot, end, prot);
1722                             }
1723                         }
1724                     }
1725                 } else {
1726                     prot = 0;
1727                     mem_print(mon, &start, &last_prot, end, prot);
1728                 }
1729             }
1730         } else {
1731             prot = 0;
1732             mem_print(mon, &start, &last_prot, end, prot);
1733         }
1734     }
1735     /* Flush last range */
1736     mem_print(mon, &start, &last_prot, (hwaddr)1 << 48, 0);
1737 }
1738 #endif
1739
1740 static void mem_info(Monitor *mon, const QDict *qdict)
1741 {
1742     CPUArchState *env;
1743
1744     env = mon_get_cpu();
1745
1746     if (!(env->cr[0] & CR0_PG_MASK)) {
1747         monitor_printf(mon, "PG disabled\n");
1748         return;
1749     }
1750     if (env->cr[4] & CR4_PAE_MASK) {
1751 #ifdef TARGET_X86_64
1752         if (env->hflags & HF_LMA_MASK) {
1753             mem_info_64(mon, env);
1754         } else
1755 #endif
1756         {
1757             mem_info_pae32(mon, env);
1758         }
1759     } else {
1760         mem_info_32(mon, env);
1761     }
1762 }
1763 #endif
1764
1765 #if defined(TARGET_SH4)
1766
1767 static void print_tlb(Monitor *mon, int idx, tlb_t *tlb)
1768 {
1769     monitor_printf(mon, " tlb%i:\t"
1770                    "asid=%hhu vpn=%x\tppn=%x\tsz=%hhu size=%u\t"
1771                    "v=%hhu shared=%hhu cached=%hhu prot=%hhu "
1772                    "dirty=%hhu writethrough=%hhu\n",
1773                    idx,
1774                    tlb->asid, tlb->vpn, tlb->ppn, tlb->sz, tlb->size,
1775                    tlb->v, tlb->sh, tlb->c, tlb->pr,
1776                    tlb->d, tlb->wt);
1777 }
1778
1779 static void tlb_info(Monitor *mon, const QDict *qdict)
1780 {
1781     CPUArchState *env = mon_get_cpu();
1782     int i;
1783
1784     monitor_printf (mon, "ITLB:\n");
1785     for (i = 0 ; i < ITLB_SIZE ; i++)
1786         print_tlb (mon, i, &env->itlb[i]);
1787     monitor_printf (mon, "UTLB:\n");
1788     for (i = 0 ; i < UTLB_SIZE ; i++)
1789         print_tlb (mon, i, &env->utlb[i]);
1790 }
1791
1792 #endif
1793
1794 #if defined(TARGET_SPARC) || defined(TARGET_PPC) || defined(TARGET_XTENSA)
1795 static void tlb_info(Monitor *mon, const QDict *qdict)
1796 {
1797     CPUArchState *env1 = mon_get_cpu();
1798
1799     dump_mmu((FILE*)mon, (fprintf_function)monitor_printf, env1);
1800 }
1801 #endif
1802
1803 static void do_info_mtree(Monitor *mon, const QDict *qdict)
1804 {
1805     mtree_info((fprintf_function)monitor_printf, mon);
1806 }
1807
1808 static void do_info_numa(Monitor *mon, const QDict *qdict)
1809 {
1810     int i;
1811     CPUState *cpu;
1812
1813     monitor_printf(mon, "%d nodes\n", nb_numa_nodes);
1814     for (i = 0; i < nb_numa_nodes; i++) {
1815         monitor_printf(mon, "node %d cpus:", i);
1816         for (cpu = first_cpu; cpu != NULL; cpu = cpu->next_cpu) {
1817             if (cpu->numa_node == i) {
1818                 monitor_printf(mon, " %d", cpu->cpu_index);
1819             }
1820         }
1821         monitor_printf(mon, "\n");
1822         monitor_printf(mon, "node %d size: %" PRId64 " MB\n", i,
1823             node_mem[i] >> 20);
1824     }
1825 }
1826
1827 #ifdef CONFIG_PROFILER
1828
1829 int64_t qemu_time;
1830 int64_t dev_time;
1831
1832 static void do_info_profile(Monitor *mon, const QDict *qdict)
1833 {
1834     int64_t total;
1835     total = qemu_time;
1836     if (total == 0)
1837         total = 1;
1838     monitor_printf(mon, "async time  %" PRId64 " (%0.3f)\n",
1839                    dev_time, dev_time / (double)get_ticks_per_sec());
1840     monitor_printf(mon, "qemu time   %" PRId64 " (%0.3f)\n",
1841                    qemu_time, qemu_time / (double)get_ticks_per_sec());
1842     qemu_time = 0;
1843     dev_time = 0;
1844 }
1845 #else
1846 static void do_info_profile(Monitor *mon, const QDict *qdict)
1847 {
1848     monitor_printf(mon, "Internal profiler not compiled\n");
1849 }
1850 #endif
1851
1852 /* Capture support */
1853 static QLIST_HEAD (capture_list_head, CaptureState) capture_head;
1854
1855 static void do_info_capture(Monitor *mon, const QDict *qdict)
1856 {
1857     int i;
1858     CaptureState *s;
1859
1860     for (s = capture_head.lh_first, i = 0; s; s = s->entries.le_next, ++i) {
1861         monitor_printf(mon, "[%d]: ", i);
1862         s->ops.info (s->opaque);
1863     }
1864 }
1865
1866 static void do_stop_capture(Monitor *mon, const QDict *qdict)
1867 {
1868     int i;
1869     int n = qdict_get_int(qdict, "n");
1870     CaptureState *s;
1871
1872     for (s = capture_head.lh_first, i = 0; s; s = s->entries.le_next, ++i) {
1873         if (i == n) {
1874             s->ops.destroy (s->opaque);
1875             QLIST_REMOVE (s, entries);
1876             g_free (s);
1877             return;
1878         }
1879     }
1880 }
1881
1882 static void do_wav_capture(Monitor *mon, const QDict *qdict)
1883 {
1884     const char *path = qdict_get_str(qdict, "path");
1885     int has_freq = qdict_haskey(qdict, "freq");
1886     int freq = qdict_get_try_int(qdict, "freq", -1);
1887     int has_bits = qdict_haskey(qdict, "bits");
1888     int bits = qdict_get_try_int(qdict, "bits", -1);
1889     int has_channels = qdict_haskey(qdict, "nchannels");
1890     int nchannels = qdict_get_try_int(qdict, "nchannels", -1);
1891     CaptureState *s;
1892
1893     s = g_malloc0 (sizeof (*s));
1894
1895     freq = has_freq ? freq : 44100;
1896     bits = has_bits ? bits : 16;
1897     nchannels = has_channels ? nchannels : 2;
1898
1899     if (wav_start_capture (s, path, freq, bits, nchannels)) {
1900         monitor_printf(mon, "Failed to add wave capture\n");
1901         g_free (s);
1902         return;
1903     }
1904     QLIST_INSERT_HEAD (&capture_head, s, entries);
1905 }
1906
1907 static qemu_acl *find_acl(Monitor *mon, const char *name)
1908 {
1909     qemu_acl *acl = qemu_acl_find(name);
1910
1911     if (!acl) {
1912         monitor_printf(mon, "acl: unknown list '%s'\n", name);
1913     }
1914     return acl;
1915 }
1916
1917 static void do_acl_show(Monitor *mon, const QDict *qdict)
1918 {
1919     const char *aclname = qdict_get_str(qdict, "aclname");
1920     qemu_acl *acl = find_acl(mon, aclname);
1921     qemu_acl_entry *entry;
1922     int i = 0;
1923
1924     if (acl) {
1925         monitor_printf(mon, "policy: %s\n",
1926                        acl->defaultDeny ? "deny" : "allow");
1927         QTAILQ_FOREACH(entry, &acl->entries, next) {
1928             i++;
1929             monitor_printf(mon, "%d: %s %s\n", i,
1930                            entry->deny ? "deny" : "allow", entry->match);
1931         }
1932     }
1933 }
1934
1935 static void do_acl_reset(Monitor *mon, const QDict *qdict)
1936 {
1937     const char *aclname = qdict_get_str(qdict, "aclname");
1938     qemu_acl *acl = find_acl(mon, aclname);
1939
1940     if (acl) {
1941         qemu_acl_reset(acl);
1942         monitor_printf(mon, "acl: removed all rules\n");
1943     }
1944 }
1945
1946 static void do_acl_policy(Monitor *mon, const QDict *qdict)
1947 {
1948     const char *aclname = qdict_get_str(qdict, "aclname");
1949     const char *policy = qdict_get_str(qdict, "policy");
1950     qemu_acl *acl = find_acl(mon, aclname);
1951
1952     if (acl) {
1953         if (strcmp(policy, "allow") == 0) {
1954             acl->defaultDeny = 0;
1955             monitor_printf(mon, "acl: policy set to 'allow'\n");
1956         } else if (strcmp(policy, "deny") == 0) {
1957             acl->defaultDeny = 1;
1958             monitor_printf(mon, "acl: policy set to 'deny'\n");
1959         } else {
1960             monitor_printf(mon, "acl: unknown policy '%s', "
1961                            "expected 'deny' or 'allow'\n", policy);
1962         }
1963     }
1964 }
1965
1966 static void do_acl_add(Monitor *mon, const QDict *qdict)
1967 {
1968     const char *aclname = qdict_get_str(qdict, "aclname");
1969     const char *match = qdict_get_str(qdict, "match");
1970     const char *policy = qdict_get_str(qdict, "policy");
1971     int has_index = qdict_haskey(qdict, "index");
1972     int index = qdict_get_try_int(qdict, "index", -1);
1973     qemu_acl *acl = find_acl(mon, aclname);
1974     int deny, ret;
1975
1976     if (acl) {
1977         if (strcmp(policy, "allow") == 0) {
1978             deny = 0;
1979         } else if (strcmp(policy, "deny") == 0) {
1980             deny = 1;
1981         } else {
1982             monitor_printf(mon, "acl: unknown policy '%s', "
1983                            "expected 'deny' or 'allow'\n", policy);
1984             return;
1985         }
1986         if (has_index)
1987             ret = qemu_acl_insert(acl, deny, match, index);
1988         else
1989             ret = qemu_acl_append(acl, deny, match);
1990         if (ret < 0)
1991             monitor_printf(mon, "acl: unable to add acl entry\n");
1992         else
1993             monitor_printf(mon, "acl: added rule at position %d\n", ret);
1994     }
1995 }
1996
1997 static void do_acl_remove(Monitor *mon, const QDict *qdict)
1998 {
1999     const char *aclname = qdict_get_str(qdict, "aclname");
2000     const char *match = qdict_get_str(qdict, "match");
2001     qemu_acl *acl = find_acl(mon, aclname);
2002     int ret;
2003
2004     if (acl) {
2005         ret = qemu_acl_remove(acl, match);
2006         if (ret < 0)
2007             monitor_printf(mon, "acl: no matching acl entry\n");
2008         else
2009             monitor_printf(mon, "acl: removed rule at position %d\n", ret);
2010     }
2011 }
2012
2013 #if defined(TARGET_I386)
2014 static void do_inject_mce(Monitor *mon, const QDict *qdict)
2015 {
2016     X86CPU *cpu;
2017     CPUState *cs;
2018     int cpu_index = qdict_get_int(qdict, "cpu_index");
2019     int bank = qdict_get_int(qdict, "bank");
2020     uint64_t status = qdict_get_int(qdict, "status");
2021     uint64_t mcg_status = qdict_get_int(qdict, "mcg_status");
2022     uint64_t addr = qdict_get_int(qdict, "addr");
2023     uint64_t misc = qdict_get_int(qdict, "misc");
2024     int flags = MCE_INJECT_UNCOND_AO;
2025
2026     if (qdict_get_try_bool(qdict, "broadcast", 0)) {
2027         flags |= MCE_INJECT_BROADCAST;
2028     }
2029     cs = qemu_get_cpu(cpu_index);
2030     if (cs != NULL) {
2031         cpu = X86_CPU(cs);
2032         cpu_x86_inject_mce(mon, cpu, bank, status, mcg_status, addr, misc,
2033                            flags);
2034     }
2035 }
2036 #endif
2037
2038 void qmp_getfd(const char *fdname, Error **errp)
2039 {
2040     mon_fd_t *monfd;
2041     int fd;
2042
2043     fd = qemu_chr_fe_get_msgfd(cur_mon->chr);
2044     if (fd == -1) {
2045         error_set(errp, QERR_FD_NOT_SUPPLIED);
2046         return;
2047     }
2048
2049     if (qemu_isdigit(fdname[0])) {
2050         error_set(errp, QERR_INVALID_PARAMETER_VALUE, "fdname",
2051                   "a name not starting with a digit");
2052         return;
2053     }
2054
2055     QLIST_FOREACH(monfd, &cur_mon->fds, next) {
2056         if (strcmp(monfd->name, fdname) != 0) {
2057             continue;
2058         }
2059
2060         close(monfd->fd);
2061         monfd->fd = fd;
2062         return;
2063     }
2064
2065     monfd = g_malloc0(sizeof(mon_fd_t));
2066     monfd->name = g_strdup(fdname);
2067     monfd->fd = fd;
2068
2069     QLIST_INSERT_HEAD(&cur_mon->fds, monfd, next);
2070 }
2071
2072 void qmp_closefd(const char *fdname, Error **errp)
2073 {
2074     mon_fd_t *monfd;
2075
2076     QLIST_FOREACH(monfd, &cur_mon->fds, next) {
2077         if (strcmp(monfd->name, fdname) != 0) {
2078             continue;
2079         }
2080
2081         QLIST_REMOVE(monfd, next);
2082         close(monfd->fd);
2083         g_free(monfd->name);
2084         g_free(monfd);
2085         return;
2086     }
2087
2088     error_set(errp, QERR_FD_NOT_FOUND, fdname);
2089 }
2090
2091 static void do_loadvm(Monitor *mon, const QDict *qdict)
2092 {
2093     int saved_vm_running  = runstate_is_running();
2094     const char *name = qdict_get_str(qdict, "name");
2095
2096     vm_stop(RUN_STATE_RESTORE_VM);
2097
2098     if (load_vmstate(name) == 0 && saved_vm_running) {
2099         vm_start();
2100     }
2101 }
2102
2103 int monitor_get_fd(Monitor *mon, const char *fdname, Error **errp)
2104 {
2105     mon_fd_t *monfd;
2106
2107     QLIST_FOREACH(monfd, &mon->fds, next) {
2108         int fd;
2109
2110         if (strcmp(monfd->name, fdname) != 0) {
2111             continue;
2112         }
2113
2114         fd = monfd->fd;
2115
2116         /* caller takes ownership of fd */
2117         QLIST_REMOVE(monfd, next);
2118         g_free(monfd->name);
2119         g_free(monfd);
2120
2121         return fd;
2122     }
2123
2124     error_setg(errp, "File descriptor named '%s' has not been found", fdname);
2125     return -1;
2126 }
2127
2128 static void monitor_fdset_cleanup(MonFdset *mon_fdset)
2129 {
2130     MonFdsetFd *mon_fdset_fd;
2131     MonFdsetFd *mon_fdset_fd_next;
2132
2133     QLIST_FOREACH_SAFE(mon_fdset_fd, &mon_fdset->fds, next, mon_fdset_fd_next) {
2134         if ((mon_fdset_fd->removed ||
2135                 (QLIST_EMPTY(&mon_fdset->dup_fds) && mon_refcount == 0)) &&
2136                 runstate_is_running()) {
2137             close(mon_fdset_fd->fd);
2138             g_free(mon_fdset_fd->opaque);
2139             QLIST_REMOVE(mon_fdset_fd, next);
2140             g_free(mon_fdset_fd);
2141         }
2142     }
2143
2144     if (QLIST_EMPTY(&mon_fdset->fds) && QLIST_EMPTY(&mon_fdset->dup_fds)) {
2145         QLIST_REMOVE(mon_fdset, next);
2146         g_free(mon_fdset);
2147     }
2148 }
2149
2150 static void monitor_fdsets_cleanup(void)
2151 {
2152     MonFdset *mon_fdset;
2153     MonFdset *mon_fdset_next;
2154
2155     QLIST_FOREACH_SAFE(mon_fdset, &mon_fdsets, next, mon_fdset_next) {
2156         monitor_fdset_cleanup(mon_fdset);
2157     }
2158 }
2159
2160 AddfdInfo *qmp_add_fd(bool has_fdset_id, int64_t fdset_id, bool has_opaque,
2161                       const char *opaque, Error **errp)
2162 {
2163     int fd;
2164     Monitor *mon = cur_mon;
2165     AddfdInfo *fdinfo;
2166
2167     fd = qemu_chr_fe_get_msgfd(mon->chr);
2168     if (fd == -1) {
2169         error_set(errp, QERR_FD_NOT_SUPPLIED);
2170         goto error;
2171     }
2172
2173     fdinfo = monitor_fdset_add_fd(fd, has_fdset_id, fdset_id,
2174                                   has_opaque, opaque, errp);
2175     if (fdinfo) {
2176         return fdinfo;
2177     }
2178
2179 error:
2180     if (fd != -1) {
2181         close(fd);
2182     }
2183     return NULL;
2184 }
2185
2186 void qmp_remove_fd(int64_t fdset_id, bool has_fd, int64_t fd, Error **errp)
2187 {
2188     MonFdset *mon_fdset;
2189     MonFdsetFd *mon_fdset_fd;
2190     char fd_str[60];
2191
2192     QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2193         if (mon_fdset->id != fdset_id) {
2194             continue;
2195         }
2196         QLIST_FOREACH(mon_fdset_fd, &mon_fdset->fds, next) {
2197             if (has_fd) {
2198                 if (mon_fdset_fd->fd != fd) {
2199                     continue;
2200                 }
2201                 mon_fdset_fd->removed = true;
2202                 break;
2203             } else {
2204                 mon_fdset_fd->removed = true;
2205             }
2206         }
2207         if (has_fd && !mon_fdset_fd) {
2208             goto error;
2209         }
2210         monitor_fdset_cleanup(mon_fdset);
2211         return;
2212     }
2213
2214 error:
2215     if (has_fd) {
2216         snprintf(fd_str, sizeof(fd_str), "fdset-id:%" PRId64 ", fd:%" PRId64,
2217                  fdset_id, fd);
2218     } else {
2219         snprintf(fd_str, sizeof(fd_str), "fdset-id:%" PRId64, fdset_id);
2220     }
2221     error_set(errp, QERR_FD_NOT_FOUND, fd_str);
2222 }
2223
2224 FdsetInfoList *qmp_query_fdsets(Error **errp)
2225 {
2226     MonFdset *mon_fdset;
2227     MonFdsetFd *mon_fdset_fd;
2228     FdsetInfoList *fdset_list = NULL;
2229
2230     QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2231         FdsetInfoList *fdset_info = g_malloc0(sizeof(*fdset_info));
2232         FdsetFdInfoList *fdsetfd_list = NULL;
2233
2234         fdset_info->value = g_malloc0(sizeof(*fdset_info->value));
2235         fdset_info->value->fdset_id = mon_fdset->id;
2236
2237         QLIST_FOREACH(mon_fdset_fd, &mon_fdset->fds, next) {
2238             FdsetFdInfoList *fdsetfd_info;
2239
2240             fdsetfd_info = g_malloc0(sizeof(*fdsetfd_info));
2241             fdsetfd_info->value = g_malloc0(sizeof(*fdsetfd_info->value));
2242             fdsetfd_info->value->fd = mon_fdset_fd->fd;
2243             if (mon_fdset_fd->opaque) {
2244                 fdsetfd_info->value->has_opaque = true;
2245                 fdsetfd_info->value->opaque = g_strdup(mon_fdset_fd->opaque);
2246             } else {
2247                 fdsetfd_info->value->has_opaque = false;
2248             }
2249
2250             fdsetfd_info->next = fdsetfd_list;
2251             fdsetfd_list = fdsetfd_info;
2252         }
2253
2254         fdset_info->value->fds = fdsetfd_list;
2255
2256         fdset_info->next = fdset_list;
2257         fdset_list = fdset_info;
2258     }
2259
2260     return fdset_list;
2261 }
2262
2263 AddfdInfo *monitor_fdset_add_fd(int fd, bool has_fdset_id, int64_t fdset_id,
2264                                 bool has_opaque, const char *opaque,
2265                                 Error **errp)
2266 {
2267     MonFdset *mon_fdset = NULL;
2268     MonFdsetFd *mon_fdset_fd;
2269     AddfdInfo *fdinfo;
2270
2271     if (has_fdset_id) {
2272         QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2273             /* Break if match found or match impossible due to ordering by ID */
2274             if (fdset_id <= mon_fdset->id) {
2275                 if (fdset_id < mon_fdset->id) {
2276                     mon_fdset = NULL;
2277                 }
2278                 break;
2279             }
2280         }
2281     }
2282
2283     if (mon_fdset == NULL) {
2284         int64_t fdset_id_prev = -1;
2285         MonFdset *mon_fdset_cur = QLIST_FIRST(&mon_fdsets);
2286
2287         if (has_fdset_id) {
2288             if (fdset_id < 0) {
2289                 error_set(errp, QERR_INVALID_PARAMETER_VALUE, "fdset-id",
2290                           "a non-negative value");
2291                 return NULL;
2292             }
2293             /* Use specified fdset ID */
2294             QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2295                 mon_fdset_cur = mon_fdset;
2296                 if (fdset_id < mon_fdset_cur->id) {
2297                     break;
2298                 }
2299             }
2300         } else {
2301             /* Use first available fdset ID */
2302             QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2303                 mon_fdset_cur = mon_fdset;
2304                 if (fdset_id_prev == mon_fdset_cur->id - 1) {
2305                     fdset_id_prev = mon_fdset_cur->id;
2306                     continue;
2307                 }
2308                 break;
2309             }
2310         }
2311
2312         mon_fdset = g_malloc0(sizeof(*mon_fdset));
2313         if (has_fdset_id) {
2314             mon_fdset->id = fdset_id;
2315         } else {
2316             mon_fdset->id = fdset_id_prev + 1;
2317         }
2318
2319         /* The fdset list is ordered by fdset ID */
2320         if (!mon_fdset_cur) {
2321             QLIST_INSERT_HEAD(&mon_fdsets, mon_fdset, next);
2322         } else if (mon_fdset->id < mon_fdset_cur->id) {
2323             QLIST_INSERT_BEFORE(mon_fdset_cur, mon_fdset, next);
2324         } else {
2325             QLIST_INSERT_AFTER(mon_fdset_cur, mon_fdset, next);
2326         }
2327     }
2328
2329     mon_fdset_fd = g_malloc0(sizeof(*mon_fdset_fd));
2330     mon_fdset_fd->fd = fd;
2331     mon_fdset_fd->removed = false;
2332     if (has_opaque) {
2333         mon_fdset_fd->opaque = g_strdup(opaque);
2334     }
2335     QLIST_INSERT_HEAD(&mon_fdset->fds, mon_fdset_fd, next);
2336
2337     fdinfo = g_malloc0(sizeof(*fdinfo));
2338     fdinfo->fdset_id = mon_fdset->id;
2339     fdinfo->fd = mon_fdset_fd->fd;
2340
2341     return fdinfo;
2342 }
2343
2344 int monitor_fdset_get_fd(int64_t fdset_id, int flags)
2345 {
2346 #ifndef _WIN32
2347     MonFdset *mon_fdset;
2348     MonFdsetFd *mon_fdset_fd;
2349     int mon_fd_flags;
2350
2351     QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2352         if (mon_fdset->id != fdset_id) {
2353             continue;
2354         }
2355         QLIST_FOREACH(mon_fdset_fd, &mon_fdset->fds, next) {
2356             mon_fd_flags = fcntl(mon_fdset_fd->fd, F_GETFL);
2357             if (mon_fd_flags == -1) {
2358                 return -1;
2359             }
2360
2361             if ((flags & O_ACCMODE) == (mon_fd_flags & O_ACCMODE)) {
2362                 return mon_fdset_fd->fd;
2363             }
2364         }
2365         errno = EACCES;
2366         return -1;
2367     }
2368 #endif
2369
2370     errno = ENOENT;
2371     return -1;
2372 }
2373
2374 int monitor_fdset_dup_fd_add(int64_t fdset_id, int dup_fd)
2375 {
2376     MonFdset *mon_fdset;
2377     MonFdsetFd *mon_fdset_fd_dup;
2378
2379     QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2380         if (mon_fdset->id != fdset_id) {
2381             continue;
2382         }
2383         QLIST_FOREACH(mon_fdset_fd_dup, &mon_fdset->dup_fds, next) {
2384             if (mon_fdset_fd_dup->fd == dup_fd) {
2385                 return -1;
2386             }
2387         }
2388         mon_fdset_fd_dup = g_malloc0(sizeof(*mon_fdset_fd_dup));
2389         mon_fdset_fd_dup->fd = dup_fd;
2390         QLIST_INSERT_HEAD(&mon_fdset->dup_fds, mon_fdset_fd_dup, next);
2391         return 0;
2392     }
2393     return -1;
2394 }
2395
2396 static int monitor_fdset_dup_fd_find_remove(int dup_fd, bool remove)
2397 {
2398     MonFdset *mon_fdset;
2399     MonFdsetFd *mon_fdset_fd_dup;
2400
2401     QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2402         QLIST_FOREACH(mon_fdset_fd_dup, &mon_fdset->dup_fds, next) {
2403             if (mon_fdset_fd_dup->fd == dup_fd) {
2404                 if (remove) {
2405                     QLIST_REMOVE(mon_fdset_fd_dup, next);
2406                     if (QLIST_EMPTY(&mon_fdset->dup_fds)) {
2407                         monitor_fdset_cleanup(mon_fdset);
2408                     }
2409                 }
2410                 return mon_fdset->id;
2411             }
2412         }
2413     }
2414     return -1;
2415 }
2416
2417 int monitor_fdset_dup_fd_find(int dup_fd)
2418 {
2419     return monitor_fdset_dup_fd_find_remove(dup_fd, false);
2420 }
2421
2422 int monitor_fdset_dup_fd_remove(int dup_fd)
2423 {
2424     return monitor_fdset_dup_fd_find_remove(dup_fd, true);
2425 }
2426
2427 int monitor_handle_fd_param(Monitor *mon, const char *fdname)
2428 {
2429     int fd;
2430     Error *local_err = NULL;
2431
2432     if (!qemu_isdigit(fdname[0]) && mon) {
2433
2434         fd = monitor_get_fd(mon, fdname, &local_err);
2435         if (fd == -1) {
2436             qerror_report_err(local_err);
2437             error_free(local_err);
2438             return -1;
2439         }
2440     } else {
2441         fd = qemu_parse_fd(fdname);
2442     }
2443
2444     return fd;
2445 }
2446
2447 /* Please update hmp-commands.hx when adding or changing commands */
2448 static mon_cmd_t info_cmds[] = {
2449     {
2450         .name       = "version",
2451         .args_type  = "",
2452         .params     = "",
2453         .help       = "show the version of QEMU",
2454         .mhandler.cmd = hmp_info_version,
2455     },
2456     {
2457         .name       = "network",
2458         .args_type  = "",
2459         .params     = "",
2460         .help       = "show the network state",
2461         .mhandler.cmd = do_info_network,
2462     },
2463     {
2464         .name       = "chardev",
2465         .args_type  = "",
2466         .params     = "",
2467         .help       = "show the character devices",
2468         .mhandler.cmd = hmp_info_chardev,
2469     },
2470     {
2471         .name       = "block",
2472         .args_type  = "verbose:-v,device:B?",
2473         .params     = "[-v] [device]",
2474         .help       = "show info of one block device or all block devices "
2475                       "(and details of images with -v option)",
2476         .mhandler.cmd = hmp_info_block,
2477     },
2478     {
2479         .name       = "blockstats",
2480         .args_type  = "",
2481         .params     = "",
2482         .help       = "show block device statistics",
2483         .mhandler.cmd = hmp_info_blockstats,
2484     },
2485     {
2486         .name       = "block-jobs",
2487         .args_type  = "",
2488         .params     = "",
2489         .help       = "show progress of ongoing block device operations",
2490         .mhandler.cmd = hmp_info_block_jobs,
2491     },
2492     {
2493         .name       = "registers",
2494         .args_type  = "",
2495         .params     = "",
2496         .help       = "show the cpu registers",
2497         .mhandler.cmd = do_info_registers,
2498     },
2499     {
2500         .name       = "cpus",
2501         .args_type  = "",
2502         .params     = "",
2503         .help       = "show infos for each CPU",
2504         .mhandler.cmd = hmp_info_cpus,
2505     },
2506     {
2507         .name       = "history",
2508         .args_type  = "",
2509         .params     = "",
2510         .help       = "show the command line history",
2511         .mhandler.cmd = do_info_history,
2512     },
2513 #if defined(TARGET_I386) || defined(TARGET_PPC) || defined(TARGET_MIPS) || \
2514     defined(TARGET_LM32) || (defined(TARGET_SPARC) && !defined(TARGET_SPARC64))
2515     {
2516         .name       = "irq",
2517         .args_type  = "",
2518         .params     = "",
2519         .help       = "show the interrupts statistics (if available)",
2520 #ifdef TARGET_SPARC
2521         .mhandler.cmd = sun4m_irq_info,
2522 #elif defined(TARGET_LM32)
2523         .mhandler.cmd = lm32_irq_info,
2524 #else
2525         .mhandler.cmd = irq_info,
2526 #endif
2527     },
2528     {
2529         .name       = "pic",
2530         .args_type  = "",
2531         .params     = "",
2532         .help       = "show i8259 (PIC) state",
2533 #ifdef TARGET_SPARC
2534         .mhandler.cmd = sun4m_pic_info,
2535 #elif defined(TARGET_LM32)
2536         .mhandler.cmd = lm32_do_pic_info,
2537 #else
2538         .mhandler.cmd = pic_info,
2539 #endif
2540     },
2541 #endif
2542     {
2543         .name       = "pci",
2544         .args_type  = "",
2545         .params     = "",
2546         .help       = "show PCI info",
2547         .mhandler.cmd = hmp_info_pci,
2548     },
2549 #if defined(TARGET_I386) || defined(TARGET_SH4) || defined(TARGET_SPARC) || \
2550     defined(TARGET_PPC) || defined(TARGET_XTENSA)
2551     {
2552         .name       = "tlb",
2553         .args_type  = "",
2554         .params     = "",
2555         .help       = "show virtual to physical memory mappings",
2556         .mhandler.cmd = tlb_info,
2557     },
2558 #endif
2559 #if defined(TARGET_I386)
2560     {
2561         .name       = "mem",
2562         .args_type  = "",
2563         .params     = "",
2564         .help       = "show the active virtual memory mappings",
2565         .mhandler.cmd = mem_info,
2566     },
2567 #endif
2568     {
2569         .name       = "mtree",
2570         .args_type  = "",
2571         .params     = "",
2572         .help       = "show memory tree",
2573         .mhandler.cmd = do_info_mtree,
2574     },
2575     {
2576         .name       = "jit",
2577         .args_type  = "",
2578         .params     = "",
2579         .help       = "show dynamic compiler info",
2580         .mhandler.cmd = do_info_jit,
2581     },
2582     {
2583         .name       = "kvm",
2584         .args_type  = "",
2585         .params     = "",
2586         .help       = "show KVM information",
2587         .mhandler.cmd = hmp_info_kvm,
2588     },
2589     {
2590         .name       = "numa",
2591         .args_type  = "",
2592         .params     = "",
2593         .help       = "show NUMA information",
2594         .mhandler.cmd = do_info_numa,
2595     },
2596     {
2597         .name       = "usb",
2598         .args_type  = "",
2599         .params     = "",
2600         .help       = "show guest USB devices",
2601         .mhandler.cmd = usb_info,
2602     },
2603     {
2604         .name       = "usbhost",
2605         .args_type  = "",
2606         .params     = "",
2607         .help       = "show host USB devices",
2608         .mhandler.cmd = usb_host_info,
2609     },
2610     {
2611         .name       = "profile",
2612         .args_type  = "",
2613         .params     = "",
2614         .help       = "show profiling information",
2615         .mhandler.cmd = do_info_profile,
2616     },
2617     {
2618         .name       = "capture",
2619         .args_type  = "",
2620         .params     = "",
2621         .help       = "show capture information",
2622         .mhandler.cmd = do_info_capture,
2623     },
2624     {
2625         .name       = "snapshots",
2626         .args_type  = "",
2627         .params     = "",
2628         .help       = "show the currently saved VM snapshots",
2629         .mhandler.cmd = do_info_snapshots,
2630     },
2631     {
2632         .name       = "status",
2633         .args_type  = "",
2634         .params     = "",
2635         .help       = "show the current VM status (running|paused)",
2636         .mhandler.cmd = hmp_info_status,
2637     },
2638     {
2639         .name       = "pcmcia",
2640         .args_type  = "",
2641         .params     = "",
2642         .help       = "show guest PCMCIA status",
2643         .mhandler.cmd = pcmcia_info,
2644     },
2645     {
2646         .name       = "mice",
2647         .args_type  = "",
2648         .params     = "",
2649         .help       = "show which guest mouse is receiving events",
2650         .mhandler.cmd = hmp_info_mice,
2651     },
2652     {
2653         .name       = "vnc",
2654         .args_type  = "",
2655         .params     = "",
2656         .help       = "show the vnc server status",
2657         .mhandler.cmd = hmp_info_vnc,
2658     },
2659 #if defined(CONFIG_SPICE)
2660     {
2661         .name       = "spice",
2662         .args_type  = "",
2663         .params     = "",
2664         .help       = "show the spice server status",
2665         .mhandler.cmd = hmp_info_spice,
2666     },
2667 #endif
2668     {
2669         .name       = "name",
2670         .args_type  = "",
2671         .params     = "",
2672         .help       = "show the current VM name",
2673         .mhandler.cmd = hmp_info_name,
2674     },
2675     {
2676         .name       = "uuid",
2677         .args_type  = "",
2678         .params     = "",
2679         .help       = "show the current VM UUID",
2680         .mhandler.cmd = hmp_info_uuid,
2681     },
2682     {
2683         .name       = "cpustats",
2684         .args_type  = "",
2685         .params     = "",
2686         .help       = "show CPU statistics",
2687         .mhandler.cmd = do_info_cpu_stats,
2688     },
2689 #if defined(CONFIG_SLIRP)
2690     {
2691         .name       = "usernet",
2692         .args_type  = "",
2693         .params     = "",
2694         .help       = "show user network stack connection states",
2695         .mhandler.cmd = do_info_usernet,
2696     },
2697 #endif
2698     {
2699         .name       = "migrate",
2700         .args_type  = "",
2701         .params     = "",
2702         .help       = "show migration status",
2703         .mhandler.cmd = hmp_info_migrate,
2704     },
2705     {
2706         .name       = "migrate_capabilities",
2707         .args_type  = "",
2708         .params     = "",
2709         .help       = "show current migration capabilities",
2710         .mhandler.cmd = hmp_info_migrate_capabilities,
2711     },
2712     {
2713         .name       = "migrate_cache_size",
2714         .args_type  = "",
2715         .params     = "",
2716         .help       = "show current migration xbzrle cache size",
2717         .mhandler.cmd = hmp_info_migrate_cache_size,
2718     },
2719     {
2720         .name       = "balloon",
2721         .args_type  = "",
2722         .params     = "",
2723         .help       = "show balloon information",
2724         .mhandler.cmd = hmp_info_balloon,
2725     },
2726     {
2727         .name       = "qtree",
2728         .args_type  = "",
2729         .params     = "",
2730         .help       = "show device tree",
2731         .mhandler.cmd = do_info_qtree,
2732     },
2733     {
2734         .name       = "qdm",
2735         .args_type  = "",
2736         .params     = "",
2737         .help       = "show qdev device model list",
2738         .mhandler.cmd = do_info_qdm,
2739     },
2740     {
2741         .name       = "roms",
2742         .args_type  = "",
2743         .params     = "",
2744         .help       = "show roms",
2745         .mhandler.cmd = do_info_roms,
2746     },
2747     {
2748         .name       = "trace-events",
2749         .args_type  = "",
2750         .params     = "",
2751         .help       = "show available trace-events & their state",
2752         .mhandler.cmd = do_trace_print_events,
2753     },
2754     {
2755         .name       = "tpm",
2756         .args_type  = "",
2757         .params     = "",
2758         .help       = "show the TPM device",
2759         .mhandler.cmd = hmp_info_tpm,
2760     },
2761     {
2762         .name       = NULL,
2763     },
2764 };
2765
2766 /* mon_cmds and info_cmds would be sorted at runtime */
2767 static mon_cmd_t mon_cmds[] = {
2768 #include "hmp-commands.h"
2769     { NULL, NULL, },
2770 };
2771
2772 static const mon_cmd_t qmp_cmds[] = {
2773 #include "qmp-commands-old.h"
2774     { /* NULL */ },
2775 };
2776
2777 /*******************************************************************/
2778
2779 static const char *pch;
2780 static sigjmp_buf expr_env;
2781
2782 #define MD_TLONG 0
2783 #define MD_I32   1
2784
2785 typedef struct MonitorDef {
2786     const char *name;
2787     int offset;
2788     target_long (*get_value)(const struct MonitorDef *md, int val);
2789     int type;
2790 } MonitorDef;
2791
2792 #if defined(TARGET_I386)
2793 static target_long monitor_get_pc (const struct MonitorDef *md, int val)
2794 {
2795     CPUArchState *env = mon_get_cpu();
2796     return env->eip + env->segs[R_CS].base;
2797 }
2798 #endif
2799
2800 #if defined(TARGET_PPC)
2801 static target_long monitor_get_ccr (const struct MonitorDef *md, int val)
2802 {
2803     CPUArchState *env = mon_get_cpu();
2804     unsigned int u;
2805     int i;
2806
2807     u = 0;
2808     for (i = 0; i < 8; i++)
2809         u |= env->crf[i] << (32 - (4 * i));
2810
2811     return u;
2812 }
2813
2814 static target_long monitor_get_msr (const struct MonitorDef *md, int val)
2815 {
2816     CPUArchState *env = mon_get_cpu();
2817     return env->msr;
2818 }
2819
2820 static target_long monitor_get_xer (const struct MonitorDef *md, int val)
2821 {
2822     CPUArchState *env = mon_get_cpu();
2823     return env->xer;
2824 }
2825
2826 static target_long monitor_get_decr (const struct MonitorDef *md, int val)
2827 {
2828     CPUArchState *env = mon_get_cpu();
2829     return cpu_ppc_load_decr(env);
2830 }
2831
2832 static target_long monitor_get_tbu (const struct MonitorDef *md, int val)
2833 {
2834     CPUArchState *env = mon_get_cpu();
2835     return cpu_ppc_load_tbu(env);
2836 }
2837
2838 static target_long monitor_get_tbl (const struct MonitorDef *md, int val)
2839 {
2840     CPUArchState *env = mon_get_cpu();
2841     return cpu_ppc_load_tbl(env);
2842 }
2843 #endif
2844
2845 #if defined(TARGET_SPARC)
2846 #ifndef TARGET_SPARC64
2847 static target_long monitor_get_psr (const struct MonitorDef *md, int val)
2848 {
2849     CPUArchState *env = mon_get_cpu();
2850
2851     return cpu_get_psr(env);
2852 }
2853 #endif
2854
2855 static target_long monitor_get_reg(const struct MonitorDef *md, int val)
2856 {
2857     CPUArchState *env = mon_get_cpu();
2858     return env->regwptr[val];
2859 }
2860 #endif
2861
2862 static const MonitorDef monitor_defs[] = {
2863 #ifdef TARGET_I386
2864
2865 #define SEG(name, seg) \
2866     { name, offsetof(CPUX86State, segs[seg].selector), NULL, MD_I32 },\
2867     { name ".base", offsetof(CPUX86State, segs[seg].base) },\
2868     { name ".limit", offsetof(CPUX86State, segs[seg].limit), NULL, MD_I32 },
2869
2870     { "eax", offsetof(CPUX86State, regs[0]) },
2871     { "ecx", offsetof(CPUX86State, regs[1]) },
2872     { "edx", offsetof(CPUX86State, regs[2]) },
2873     { "ebx", offsetof(CPUX86State, regs[3]) },
2874     { "esp|sp", offsetof(CPUX86State, regs[4]) },
2875     { "ebp|fp", offsetof(CPUX86State, regs[5]) },
2876     { "esi", offsetof(CPUX86State, regs[6]) },
2877     { "edi", offsetof(CPUX86State, regs[7]) },
2878 #ifdef TARGET_X86_64
2879     { "r8", offsetof(CPUX86State, regs[8]) },
2880     { "r9", offsetof(CPUX86State, regs[9]) },
2881     { "r10", offsetof(CPUX86State, regs[10]) },
2882     { "r11", offsetof(CPUX86State, regs[11]) },
2883     { "r12", offsetof(CPUX86State, regs[12]) },
2884     { "r13", offsetof(CPUX86State, regs[13]) },
2885     { "r14", offsetof(CPUX86State, regs[14]) },
2886     { "r15", offsetof(CPUX86State, regs[15]) },
2887 #endif
2888     { "eflags", offsetof(CPUX86State, eflags) },
2889     { "eip", offsetof(CPUX86State, eip) },
2890     SEG("cs", R_CS)
2891     SEG("ds", R_DS)
2892     SEG("es", R_ES)
2893     SEG("ss", R_SS)
2894     SEG("fs", R_FS)
2895     SEG("gs", R_GS)
2896     { "pc", 0, monitor_get_pc, },
2897 #elif defined(TARGET_PPC)
2898     /* General purpose registers */
2899     { "r0", offsetof(CPUPPCState, gpr[0]) },
2900     { "r1", offsetof(CPUPPCState, gpr[1]) },
2901     { "r2", offsetof(CPUPPCState, gpr[2]) },
2902     { "r3", offsetof(CPUPPCState, gpr[3]) },
2903     { "r4", offsetof(CPUPPCState, gpr[4]) },
2904     { "r5", offsetof(CPUPPCState, gpr[5]) },
2905     { "r6", offsetof(CPUPPCState, gpr[6]) },
2906     { "r7", offsetof(CPUPPCState, gpr[7]) },
2907     { "r8", offsetof(CPUPPCState, gpr[8]) },
2908     { "r9", offsetof(CPUPPCState, gpr[9]) },
2909     { "r10", offsetof(CPUPPCState, gpr[10]) },
2910     { "r11", offsetof(CPUPPCState, gpr[11]) },
2911     { "r12", offsetof(CPUPPCState, gpr[12]) },
2912     { "r13", offsetof(CPUPPCState, gpr[13]) },
2913     { "r14", offsetof(CPUPPCState, gpr[14]) },
2914     { "r15", offsetof(CPUPPCState, gpr[15]) },
2915     { "r16", offsetof(CPUPPCState, gpr[16]) },
2916     { "r17", offsetof(CPUPPCState, gpr[17]) },
2917     { "r18", offsetof(CPUPPCState, gpr[18]) },
2918     { "r19", offsetof(CPUPPCState, gpr[19]) },
2919     { "r20", offsetof(CPUPPCState, gpr[20]) },
2920     { "r21", offsetof(CPUPPCState, gpr[21]) },
2921     { "r22", offsetof(CPUPPCState, gpr[22]) },
2922     { "r23", offsetof(CPUPPCState, gpr[23]) },
2923     { "r24", offsetof(CPUPPCState, gpr[24]) },
2924     { "r25", offsetof(CPUPPCState, gpr[25]) },
2925     { "r26", offsetof(CPUPPCState, gpr[26]) },
2926     { "r27", offsetof(CPUPPCState, gpr[27]) },
2927     { "r28", offsetof(CPUPPCState, gpr[28]) },
2928     { "r29", offsetof(CPUPPCState, gpr[29]) },
2929     { "r30", offsetof(CPUPPCState, gpr[30]) },
2930     { "r31", offsetof(CPUPPCState, gpr[31]) },
2931     /* Floating point registers */
2932     { "f0", offsetof(CPUPPCState, fpr[0]) },
2933     { "f1", offsetof(CPUPPCState, fpr[1]) },
2934     { "f2", offsetof(CPUPPCState, fpr[2]) },
2935     { "f3", offsetof(CPUPPCState, fpr[3]) },
2936     { "f4", offsetof(CPUPPCState, fpr[4]) },
2937     { "f5", offsetof(CPUPPCState, fpr[5]) },
2938     { "f6", offsetof(CPUPPCState, fpr[6]) },
2939     { "f7", offsetof(CPUPPCState, fpr[7]) },
2940     { "f8", offsetof(CPUPPCState, fpr[8]) },
2941     { "f9", offsetof(CPUPPCState, fpr[9]) },
2942     { "f10", offsetof(CPUPPCState, fpr[10]) },
2943     { "f11", offsetof(CPUPPCState, fpr[11]) },
2944     { "f12", offsetof(CPUPPCState, fpr[12]) },
2945     { "f13", offsetof(CPUPPCState, fpr[13]) },
2946     { "f14", offsetof(CPUPPCState, fpr[14]) },
2947     { "f15", offsetof(CPUPPCState, fpr[15]) },
2948     { "f16", offsetof(CPUPPCState, fpr[16]) },
2949     { "f17", offsetof(CPUPPCState, fpr[17]) },
2950     { "f18", offsetof(CPUPPCState, fpr[18]) },
2951     { "f19", offsetof(CPUPPCState, fpr[19]) },
2952     { "f20", offsetof(CPUPPCState, fpr[20]) },
2953     { "f21", offsetof(CPUPPCState, fpr[21]) },
2954     { "f22", offsetof(CPUPPCState, fpr[22]) },
2955     { "f23", offsetof(CPUPPCState, fpr[23]) },
2956     { "f24", offsetof(CPUPPCState, fpr[24]) },
2957     { "f25", offsetof(CPUPPCState, fpr[25]) },
2958     { "f26", offsetof(CPUPPCState, fpr[26]) },
2959     { "f27", offsetof(CPUPPCState, fpr[27]) },
2960     { "f28", offsetof(CPUPPCState, fpr[28]) },
2961     { "f29", offsetof(CPUPPCState, fpr[29]) },
2962     { "f30", offsetof(CPUPPCState, fpr[30]) },
2963     { "f31", offsetof(CPUPPCState, fpr[31]) },
2964     { "fpscr", offsetof(CPUPPCState, fpscr) },
2965     /* Next instruction pointer */
2966     { "nip|pc", offsetof(CPUPPCState, nip) },
2967     { "lr", offsetof(CPUPPCState, lr) },
2968     { "ctr", offsetof(CPUPPCState, ctr) },
2969     { "decr", 0, &monitor_get_decr, },
2970     { "ccr", 0, &monitor_get_ccr, },
2971     /* Machine state register */
2972     { "msr", 0, &monitor_get_msr, },
2973     { "xer", 0, &monitor_get_xer, },
2974     { "tbu", 0, &monitor_get_tbu, },
2975     { "tbl", 0, &monitor_get_tbl, },
2976     /* Segment registers */
2977     { "sdr1", offsetof(CPUPPCState, spr[SPR_SDR1]) },
2978     { "sr0", offsetof(CPUPPCState, sr[0]) },
2979     { "sr1", offsetof(CPUPPCState, sr[1]) },
2980     { "sr2", offsetof(CPUPPCState, sr[2]) },
2981     { "sr3", offsetof(CPUPPCState, sr[3]) },
2982     { "sr4", offsetof(CPUPPCState, sr[4]) },
2983     { "sr5", offsetof(CPUPPCState, sr[5]) },
2984     { "sr6", offsetof(CPUPPCState, sr[6]) },
2985     { "sr7", offsetof(CPUPPCState, sr[7]) },
2986     { "sr8", offsetof(CPUPPCState, sr[8]) },
2987     { "sr9", offsetof(CPUPPCState, sr[9]) },
2988     { "sr10", offsetof(CPUPPCState, sr[10]) },
2989     { "sr11", offsetof(CPUPPCState, sr[11]) },
2990     { "sr12", offsetof(CPUPPCState, sr[12]) },
2991     { "sr13", offsetof(CPUPPCState, sr[13]) },
2992     { "sr14", offsetof(CPUPPCState, sr[14]) },
2993     { "sr15", offsetof(CPUPPCState, sr[15]) },
2994     /* Too lazy to put BATs... */
2995     { "pvr", offsetof(CPUPPCState, spr[SPR_PVR]) },
2996
2997     { "srr0", offsetof(CPUPPCState, spr[SPR_SRR0]) },
2998     { "srr1", offsetof(CPUPPCState, spr[SPR_SRR1]) },
2999     { "sprg0", offsetof(CPUPPCState, spr[SPR_SPRG0]) },
3000     { "sprg1", offsetof(CPUPPCState, spr[SPR_SPRG1]) },
3001     { "sprg2", offsetof(CPUPPCState, spr[SPR_SPRG2]) },
3002     { "sprg3", offsetof(CPUPPCState, spr[SPR_SPRG3]) },
3003     { "sprg4", offsetof(CPUPPCState, spr[SPR_SPRG4]) },
3004     { "sprg5", offsetof(CPUPPCState, spr[SPR_SPRG5]) },
3005     { "sprg6", offsetof(CPUPPCState, spr[SPR_SPRG6]) },
3006     { "sprg7", offsetof(CPUPPCState, spr[SPR_SPRG7]) },
3007     { "pid", offsetof(CPUPPCState, spr[SPR_BOOKE_PID]) },
3008     { "csrr0", offsetof(CPUPPCState, spr[SPR_BOOKE_CSRR0]) },
3009     { "csrr1", offsetof(CPUPPCState, spr[SPR_BOOKE_CSRR1]) },
3010     { "esr", offsetof(CPUPPCState, spr[SPR_BOOKE_ESR]) },
3011     { "dear", offsetof(CPUPPCState, spr[SPR_BOOKE_DEAR]) },
3012     { "mcsr", offsetof(CPUPPCState, spr[SPR_BOOKE_MCSR]) },
3013     { "tsr", offsetof(CPUPPCState, spr[SPR_BOOKE_TSR]) },
3014     { "tcr", offsetof(CPUPPCState, spr[SPR_BOOKE_TCR]) },
3015     { "vrsave", offsetof(CPUPPCState, spr[SPR_VRSAVE]) },
3016     { "pir", offsetof(CPUPPCState, spr[SPR_BOOKE_PIR]) },
3017     { "mcsrr0", offsetof(CPUPPCState, spr[SPR_BOOKE_MCSRR0]) },
3018     { "mcsrr1", offsetof(CPUPPCState, spr[SPR_BOOKE_MCSRR1]) },
3019     { "decar", offsetof(CPUPPCState, spr[SPR_BOOKE_DECAR]) },
3020     { "ivpr", offsetof(CPUPPCState, spr[SPR_BOOKE_IVPR]) },
3021     { "epcr", offsetof(CPUPPCState, spr[SPR_BOOKE_EPCR]) },
3022     { "sprg8", offsetof(CPUPPCState, spr[SPR_BOOKE_SPRG8]) },
3023     { "ivor0", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR0]) },
3024     { "ivor1", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR1]) },
3025     { "ivor2", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR2]) },
3026     { "ivor3", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR3]) },
3027     { "ivor4", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR4]) },
3028     { "ivor5", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR5]) },
3029     { "ivor6", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR6]) },
3030     { "ivor7", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR7]) },
3031     { "ivor8", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR8]) },
3032     { "ivor9", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR9]) },
3033     { "ivor10", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR10]) },
3034     { "ivor11", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR11]) },
3035     { "ivor12", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR12]) },
3036     { "ivor13", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR13]) },
3037     { "ivor14", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR14]) },
3038     { "ivor15", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR15]) },
3039     { "ivor32", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR32]) },
3040     { "ivor33", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR33]) },
3041     { "ivor34", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR34]) },
3042     { "ivor35", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR35]) },
3043     { "ivor36", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR36]) },
3044     { "ivor37", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR37]) },
3045     { "mas0", offsetof(CPUPPCState, spr[SPR_BOOKE_MAS0]) },
3046     { "mas1", offsetof(CPUPPCState, spr[SPR_BOOKE_MAS1]) },
3047     { "mas2", offsetof(CPUPPCState, spr[SPR_BOOKE_MAS2]) },
3048     { "mas3", offsetof(CPUPPCState, spr[SPR_BOOKE_MAS3]) },
3049     { "mas4", offsetof(CPUPPCState, spr[SPR_BOOKE_MAS4]) },
3050     { "mas6", offsetof(CPUPPCState, spr[SPR_BOOKE_MAS6]) },
3051     { "mas7", offsetof(CPUPPCState, spr[SPR_BOOKE_MAS7]) },
3052     { "mmucfg", offsetof(CPUPPCState, spr[SPR_MMUCFG]) },
3053     { "tlb0cfg", offsetof(CPUPPCState, spr[SPR_BOOKE_TLB0CFG]) },
3054     { "tlb1cfg", offsetof(CPUPPCState, spr[SPR_BOOKE_TLB1CFG]) },
3055     { "epr", offsetof(CPUPPCState, spr[SPR_BOOKE_EPR]) },
3056     { "eplc", offsetof(CPUPPCState, spr[SPR_BOOKE_EPLC]) },
3057     { "epsc", offsetof(CPUPPCState, spr[SPR_BOOKE_EPSC]) },
3058     { "svr", offsetof(CPUPPCState, spr[SPR_E500_SVR]) },
3059     { "mcar", offsetof(CPUPPCState, spr[SPR_Exxx_MCAR]) },
3060     { "pid1", offsetof(CPUPPCState, spr[SPR_BOOKE_PID1]) },
3061     { "pid2", offsetof(CPUPPCState, spr[SPR_BOOKE_PID2]) },
3062     { "hid0", offsetof(CPUPPCState, spr[SPR_HID0]) },
3063
3064 #elif defined(TARGET_SPARC)
3065     { "g0", offsetof(CPUSPARCState, gregs[0]) },
3066     { "g1", offsetof(CPUSPARCState, gregs[1]) },
3067     { "g2", offsetof(CPUSPARCState, gregs[2]) },
3068     { "g3", offsetof(CPUSPARCState, gregs[3]) },
3069     { "g4", offsetof(CPUSPARCState, gregs[4]) },
3070     { "g5", offsetof(CPUSPARCState, gregs[5]) },
3071     { "g6", offsetof(CPUSPARCState, gregs[6]) },
3072     { "g7", offsetof(CPUSPARCState, gregs[7]) },
3073     { "o0", 0, monitor_get_reg },
3074     { "o1", 1, monitor_get_reg },
3075     { "o2", 2, monitor_get_reg },
3076     { "o3", 3, monitor_get_reg },
3077     { "o4", 4, monitor_get_reg },
3078     { "o5", 5, monitor_get_reg },
3079     { "o6", 6, monitor_get_reg },
3080     { "o7", 7, monitor_get_reg },
3081     { "l0", 8, monitor_get_reg },
3082     { "l1", 9, monitor_get_reg },
3083     { "l2", 10, monitor_get_reg },
3084     { "l3", 11, monitor_get_reg },
3085     { "l4", 12, monitor_get_reg },
3086     { "l5", 13, monitor_get_reg },
3087     { "l6", 14, monitor_get_reg },
3088     { "l7", 15, monitor_get_reg },
3089     { "i0", 16, monitor_get_reg },
3090     { "i1", 17, monitor_get_reg },
3091     { "i2", 18, monitor_get_reg },
3092     { "i3", 19, monitor_get_reg },
3093     { "i4", 20, monitor_get_reg },
3094     { "i5", 21, monitor_get_reg },
3095     { "i6", 22, monitor_get_reg },
3096     { "i7", 23, monitor_get_reg },
3097     { "pc", offsetof(CPUSPARCState, pc) },
3098     { "npc", offsetof(CPUSPARCState, npc) },
3099     { "y", offsetof(CPUSPARCState, y) },
3100 #ifndef TARGET_SPARC64
3101     { "psr", 0, &monitor_get_psr, },
3102     { "wim", offsetof(CPUSPARCState, wim) },
3103 #endif
3104     { "tbr", offsetof(CPUSPARCState, tbr) },
3105     { "fsr", offsetof(CPUSPARCState, fsr) },
3106     { "f0", offsetof(CPUSPARCState, fpr[0].l.upper) },
3107     { "f1", offsetof(CPUSPARCState, fpr[0].l.lower) },
3108     { "f2", offsetof(CPUSPARCState, fpr[1].l.upper) },
3109     { "f3", offsetof(CPUSPARCState, fpr[1].l.lower) },
3110     { "f4", offsetof(CPUSPARCState, fpr[2].l.upper) },
3111     { "f5", offsetof(CPUSPARCState, fpr[2].l.lower) },
3112     { "f6", offsetof(CPUSPARCState, fpr[3].l.upper) },
3113     { "f7", offsetof(CPUSPARCState, fpr[3].l.lower) },
3114     { "f8", offsetof(CPUSPARCState, fpr[4].l.upper) },
3115     { "f9", offsetof(CPUSPARCState, fpr[4].l.lower) },
3116     { "f10", offsetof(CPUSPARCState, fpr[5].l.upper) },
3117     { "f11", offsetof(CPUSPARCState, fpr[5].l.lower) },
3118     { "f12", offsetof(CPUSPARCState, fpr[6].l.upper) },
3119     { "f13", offsetof(CPUSPARCState, fpr[6].l.lower) },
3120     { "f14", offsetof(CPUSPARCState, fpr[7].l.upper) },
3121     { "f15", offsetof(CPUSPARCState, fpr[7].l.lower) },
3122     { "f16", offsetof(CPUSPARCState, fpr[8].l.upper) },
3123     { "f17", offsetof(CPUSPARCState, fpr[8].l.lower) },
3124     { "f18", offsetof(CPUSPARCState, fpr[9].l.upper) },
3125     { "f19", offsetof(CPUSPARCState, fpr[9].l.lower) },
3126     { "f20", offsetof(CPUSPARCState, fpr[10].l.upper) },
3127     { "f21", offsetof(CPUSPARCState, fpr[10].l.lower) },
3128     { "f22", offsetof(CPUSPARCState, fpr[11].l.upper) },
3129     { "f23", offsetof(CPUSPARCState, fpr[11].l.lower) },
3130     { "f24", offsetof(CPUSPARCState, fpr[12].l.upper) },
3131     { "f25", offsetof(CPUSPARCState, fpr[12].l.lower) },
3132     { "f26", offsetof(CPUSPARCState, fpr[13].l.upper) },
3133     { "f27", offsetof(CPUSPARCState, fpr[13].l.lower) },
3134     { "f28", offsetof(CPUSPARCState, fpr[14].l.upper) },
3135     { "f29", offsetof(CPUSPARCState, fpr[14].l.lower) },
3136     { "f30", offsetof(CPUSPARCState, fpr[15].l.upper) },
3137     { "f31", offsetof(CPUSPARCState, fpr[15].l.lower) },
3138 #ifdef TARGET_SPARC64
3139     { "f32", offsetof(CPUSPARCState, fpr[16]) },
3140     { "f34", offsetof(CPUSPARCState, fpr[17]) },
3141     { "f36", offsetof(CPUSPARCState, fpr[18]) },
3142     { "f38", offsetof(CPUSPARCState, fpr[19]) },
3143     { "f40", offsetof(CPUSPARCState, fpr[20]) },
3144     { "f42", offsetof(CPUSPARCState, fpr[21]) },
3145     { "f44", offsetof(CPUSPARCState, fpr[22]) },
3146     { "f46", offsetof(CPUSPARCState, fpr[23]) },
3147     { "f48", offsetof(CPUSPARCState, fpr[24]) },
3148     { "f50", offsetof(CPUSPARCState, fpr[25]) },
3149     { "f52", offsetof(CPUSPARCState, fpr[26]) },
3150     { "f54", offsetof(CPUSPARCState, fpr[27]) },
3151     { "f56", offsetof(CPUSPARCState, fpr[28]) },
3152     { "f58", offsetof(CPUSPARCState, fpr[29]) },
3153     { "f60", offsetof(CPUSPARCState, fpr[30]) },
3154     { "f62", offsetof(CPUSPARCState, fpr[31]) },
3155     { "asi", offsetof(CPUSPARCState, asi) },
3156     { "pstate", offsetof(CPUSPARCState, pstate) },
3157     { "cansave", offsetof(CPUSPARCState, cansave) },
3158     { "canrestore", offsetof(CPUSPARCState, canrestore) },
3159     { "otherwin", offsetof(CPUSPARCState, otherwin) },
3160     { "wstate", offsetof(CPUSPARCState, wstate) },
3161     { "cleanwin", offsetof(CPUSPARCState, cleanwin) },
3162     { "fprs", offsetof(CPUSPARCState, fprs) },
3163 #endif
3164 #endif
3165     { NULL },
3166 };
3167
3168 static void expr_error(Monitor *mon, const char *msg)
3169 {
3170     monitor_printf(mon, "%s\n", msg);
3171     siglongjmp(expr_env, 1);
3172 }
3173
3174 /* return 0 if OK, -1 if not found */
3175 static int get_monitor_def(target_long *pval, const char *name)
3176 {
3177     const MonitorDef *md;
3178     void *ptr;
3179
3180     for(md = monitor_defs; md->name != NULL; md++) {
3181         if (compare_cmd(name, md->name)) {
3182             if (md->get_value) {
3183                 *pval = md->get_value(md, md->offset);
3184             } else {
3185                 CPUArchState *env = mon_get_cpu();
3186                 ptr = (uint8_t *)env + md->offset;
3187                 switch(md->type) {
3188                 case MD_I32:
3189                     *pval = *(int32_t *)ptr;
3190                     break;
3191                 case MD_TLONG:
3192                     *pval = *(target_long *)ptr;
3193                     break;
3194                 default:
3195                     *pval = 0;
3196                     break;
3197                 }
3198             }
3199             return 0;
3200         }
3201     }
3202     return -1;
3203 }
3204
3205 static void next(void)
3206 {
3207     if (*pch != '\0') {
3208         pch++;
3209         while (qemu_isspace(*pch))
3210             pch++;
3211     }
3212 }
3213
3214 static int64_t expr_sum(Monitor *mon);
3215
3216 static int64_t expr_unary(Monitor *mon)
3217 {
3218     int64_t n;
3219     char *p;
3220     int ret;
3221
3222     switch(*pch) {
3223     case '+':
3224         next();
3225         n = expr_unary(mon);
3226         break;
3227     case '-':
3228         next();
3229         n = -expr_unary(mon);
3230         break;
3231     case '~':
3232         next();
3233         n = ~expr_unary(mon);
3234         break;
3235     case '(':
3236         next();
3237         n = expr_sum(mon);
3238         if (*pch != ')') {
3239             expr_error(mon, "')' expected");
3240         }
3241         next();
3242         break;
3243     case '\'':
3244         pch++;
3245         if (*pch == '\0')
3246             expr_error(mon, "character constant expected");
3247         n = *pch;
3248         pch++;
3249         if (*pch != '\'')
3250             expr_error(mon, "missing terminating \' character");
3251         next();
3252         break;
3253     case '$':
3254         {
3255             char buf[128], *q;
3256             target_long reg=0;
3257
3258             pch++;
3259             q = buf;
3260             while ((*pch >= 'a' && *pch <= 'z') ||
3261                    (*pch >= 'A' && *pch <= 'Z') ||
3262                    (*pch >= '0' && *pch <= '9') ||
3263                    *pch == '_' || *pch == '.') {
3264                 if ((q - buf) < sizeof(buf) - 1)
3265                     *q++ = *pch;
3266                 pch++;
3267             }
3268             while (qemu_isspace(*pch))
3269                 pch++;
3270             *q = 0;
3271             ret = get_monitor_def(&reg, buf);
3272             if (ret < 0)
3273                 expr_error(mon, "unknown register");
3274             n = reg;
3275         }
3276         break;
3277     case '\0':
3278         expr_error(mon, "unexpected end of expression");
3279         n = 0;
3280         break;
3281     default:
3282         errno = 0;
3283         n = strtoull(pch, &p, 0);
3284         if (errno == ERANGE) {
3285             expr_error(mon, "number too large");
3286         }
3287         if (pch == p) {
3288             expr_error(mon, "invalid char in expression");
3289         }
3290         pch = p;
3291         while (qemu_isspace(*pch))
3292             pch++;
3293         break;
3294     }
3295     return n;
3296 }
3297
3298
3299 static int64_t expr_prod(Monitor *mon)
3300 {
3301     int64_t val, val2;
3302     int op;
3303
3304     val = expr_unary(mon);
3305     for(;;) {
3306         op = *pch;
3307         if (op != '*' && op != '/' && op != '%')
3308             break;
3309         next();
3310         val2 = expr_unary(mon);
3311         switch(op) {
3312         default:
3313         case '*':
3314             val *= val2;
3315             break;
3316         case '/':
3317         case '%':
3318             if (val2 == 0)
3319                 expr_error(mon, "division by zero");
3320             if (op == '/')
3321                 val /= val2;
3322             else
3323                 val %= val2;
3324             break;
3325         }
3326     }
3327     return val;
3328 }
3329
3330 static int64_t expr_logic(Monitor *mon)
3331 {
3332     int64_t val, val2;
3333     int op;
3334
3335     val = expr_prod(mon);
3336     for(;;) {
3337         op = *pch;
3338         if (op != '&' && op != '|' && op != '^')
3339             break;
3340         next();
3341         val2 = expr_prod(mon);
3342         switch(op) {
3343         default:
3344         case '&':
3345             val &= val2;
3346             break;
3347         case '|':
3348             val |= val2;
3349             break;
3350         case '^':
3351             val ^= val2;
3352             break;
3353         }
3354     }
3355     return val;
3356 }
3357
3358 static int64_t expr_sum(Monitor *mon)
3359 {
3360     int64_t val, val2;
3361     int op;
3362
3363     val = expr_logic(mon);
3364     for(;;) {
3365         op = *pch;
3366         if (op != '+' && op != '-')
3367             break;
3368         next();
3369         val2 = expr_logic(mon);
3370         if (op == '+')
3371             val += val2;
3372         else
3373             val -= val2;
3374     }
3375     return val;
3376 }
3377
3378 static int get_expr(Monitor *mon, int64_t *pval, const char **pp)
3379 {
3380     pch = *pp;
3381     if (sigsetjmp(expr_env, 0)) {
3382         *pp = pch;
3383         return -1;
3384     }
3385     while (qemu_isspace(*pch))
3386         pch++;
3387     *pval = expr_sum(mon);
3388     *pp = pch;
3389     return 0;
3390 }
3391
3392 static int get_double(Monitor *mon, double *pval, const char **pp)
3393 {
3394     const char *p = *pp;
3395     char *tailp;
3396     double d;
3397
3398     d = strtod(p, &tailp);
3399     if (tailp == p) {
3400         monitor_printf(mon, "Number expected\n");
3401         return -1;
3402     }
3403     if (d != d || d - d != 0) {
3404         /* NaN or infinity */
3405         monitor_printf(mon, "Bad number\n");
3406         return -1;
3407     }
3408     *pval = d;
3409     *pp = tailp;
3410     return 0;
3411 }
3412
3413 static int get_str(char *buf, int buf_size, const char **pp)
3414 {
3415     const char *p;
3416     char *q;
3417     int c;
3418
3419     q = buf;
3420     p = *pp;
3421     while (qemu_isspace(*p))
3422         p++;
3423     if (*p == '\0') {
3424     fail:
3425         *q = '\0';
3426         *pp = p;
3427         return -1;
3428     }
3429     if (*p == '\"') {
3430         p++;
3431         while (*p != '\0' && *p != '\"') {
3432             if (*p == '\\') {
3433                 p++;
3434                 c = *p++;
3435                 switch(c) {
3436                 case 'n':
3437                     c = '\n';
3438                     break;
3439                 case 'r':
3440                     c = '\r';
3441                     break;
3442                 case '\\':
3443                 case '\'':
3444                 case '\"':
3445                     break;
3446                 default:
3447                     qemu_printf("unsupported escape code: '\\%c'\n", c);
3448                     goto fail;
3449                 }
3450                 if ((q - buf) < buf_size - 1) {
3451                     *q++ = c;
3452                 }
3453             } else {
3454                 if ((q - buf) < buf_size - 1) {
3455                     *q++ = *p;
3456                 }
3457                 p++;
3458             }
3459         }
3460         if (*p != '\"') {
3461             qemu_printf("unterminated string\n");
3462             goto fail;
3463         }
3464         p++;
3465     } else {
3466         while (*p != '\0' && !qemu_isspace(*p)) {
3467             if ((q - buf) < buf_size - 1) {
3468                 *q++ = *p;
3469             }
3470             p++;
3471         }
3472     }
3473     *q = '\0';
3474     *pp = p;
3475     return 0;
3476 }
3477
3478 /*
3479  * Store the command-name in cmdname, and return a pointer to
3480  * the remaining of the command string.
3481  */
3482 static const char *get_command_name(const char *cmdline,
3483                                     char *cmdname, size_t nlen)
3484 {
3485     size_t len;
3486     const char *p, *pstart;
3487
3488     p = cmdline;
3489     while (qemu_isspace(*p))
3490         p++;
3491     if (*p == '\0')
3492         return NULL;
3493     pstart = p;
3494     while (*p != '\0' && *p != '/' && !qemu_isspace(*p))
3495         p++;
3496     len = p - pstart;
3497     if (len > nlen - 1)
3498         len = nlen - 1;
3499     memcpy(cmdname, pstart, len);
3500     cmdname[len] = '\0';
3501     return p;
3502 }
3503
3504 /**
3505  * Read key of 'type' into 'key' and return the current
3506  * 'type' pointer.
3507  */
3508 static char *key_get_info(const char *type, char **key)
3509 {
3510     size_t len;
3511     char *p, *str;
3512
3513     if (*type == ',')
3514         type++;
3515
3516     p = strchr(type, ':');
3517     if (!p) {
3518         *key = NULL;
3519         return NULL;
3520     }
3521     len = p - type;
3522
3523     str = g_malloc(len + 1);
3524     memcpy(str, type, len);
3525     str[len] = '\0';
3526
3527     *key = str;
3528     return ++p;
3529 }
3530
3531 static int default_fmt_format = 'x';
3532 static int default_fmt_size = 4;
3533
3534 #define MAX_ARGS 16
3535
3536 static int is_valid_option(const char *c, const char *typestr)
3537 {
3538     char option[3];
3539   
3540     option[0] = '-';
3541     option[1] = *c;
3542     option[2] = '\0';
3543   
3544     typestr = strstr(typestr, option);
3545     return (typestr != NULL);
3546 }
3547
3548 static const mon_cmd_t *search_dispatch_table(const mon_cmd_t *disp_table,
3549                                               const char *cmdname)
3550 {
3551     const mon_cmd_t *cmd;
3552
3553     for (cmd = disp_table; cmd->name != NULL; cmd++) {
3554         if (compare_cmd(cmdname, cmd->name)) {
3555             return cmd;
3556         }
3557     }
3558
3559     return NULL;
3560 }
3561
3562 static const mon_cmd_t *qmp_find_cmd(const char *cmdname)
3563 {
3564     return search_dispatch_table(qmp_cmds, cmdname);
3565 }
3566
3567 /*
3568  * Parse @cmdline according to command table @table.
3569  * If @cmdline is blank, return NULL.
3570  * If it can't be parsed, report to @mon, and return NULL.
3571  * Else, insert command arguments into @qdict, and return the command.
3572  * If a sub-command table exists, and if @cmdline contains an additional string
3573  * for a sub-command, this function will try to search the sub-command table.
3574  * If no additional string for a sub-command is present, this function will
3575  * return the command found in @table.
3576  * Do not assume the returned command points into @table!  It doesn't
3577  * when the command is a sub-command.
3578  */
3579 static const mon_cmd_t *monitor_parse_command(Monitor *mon,
3580                                               const char *cmdline,
3581                                               int start,
3582                                               mon_cmd_t *table,
3583                                               QDict *qdict)
3584 {
3585     const char *p, *typestr;
3586     int c;
3587     const mon_cmd_t *cmd;
3588     char cmdname[256];
3589     char buf[1024];
3590     char *key;
3591
3592 #ifdef DEBUG
3593     monitor_printf(mon, "command='%s', start='%d'\n", cmdline, start);
3594 #endif
3595
3596     /* extract the command name */
3597     p = get_command_name(cmdline + start, cmdname, sizeof(cmdname));
3598     if (!p)
3599         return NULL;
3600
3601     cmd = search_dispatch_table(table, cmdname);
3602     if (!cmd) {
3603         monitor_printf(mon, "unknown command: '%.*s'\n",
3604                        (int)(p - cmdline), cmdline);
3605         return NULL;
3606     }
3607
3608     /* filter out following useless space */
3609     while (qemu_isspace(*p)) {
3610         p++;
3611     }
3612     /* search sub command */
3613     if (cmd->sub_table != NULL) {
3614         /* check if user set additional command */
3615         if (*p == '\0') {
3616             return cmd;
3617         }
3618         return monitor_parse_command(mon, cmdline, p - cmdline,
3619                                      cmd->sub_table, qdict);
3620     }
3621
3622     /* parse the parameters */
3623     typestr = cmd->args_type;
3624     for(;;) {
3625         typestr = key_get_info(typestr, &key);
3626         if (!typestr)
3627             break;
3628         c = *typestr;
3629         typestr++;
3630         switch(c) {
3631         case 'F':
3632         case 'B':
3633         case 's':
3634             {
3635                 int ret;
3636
3637                 while (qemu_isspace(*p))
3638                     p++;
3639                 if (*typestr == '?') {
3640                     typestr++;
3641                     if (*p == '\0') {
3642                         /* no optional string: NULL argument */
3643                         break;
3644                     }
3645                 }
3646                 ret = get_str(buf, sizeof(buf), &p);
3647                 if (ret < 0) {
3648                     switch(c) {
3649                     case 'F':
3650                         monitor_printf(mon, "%s: filename expected\n",
3651                                        cmdname);
3652                         break;
3653                     case 'B':
3654                         monitor_printf(mon, "%s: block device name expected\n",
3655                                        cmdname);
3656                         break;
3657                     default:
3658                         monitor_printf(mon, "%s: string expected\n", cmdname);
3659                         break;
3660                     }
3661                     goto fail;
3662                 }
3663                 qdict_put(qdict, key, qstring_from_str(buf));
3664             }
3665             break;
3666         case 'O':
3667             {
3668                 QemuOptsList *opts_list;
3669                 QemuOpts *opts;
3670
3671                 opts_list = qemu_find_opts(key);
3672                 if (!opts_list || opts_list->desc->name) {
3673                     goto bad_type;
3674                 }
3675                 while (qemu_isspace(*p)) {
3676                     p++;
3677                 }
3678                 if (!*p)
3679                     break;
3680                 if (get_str(buf, sizeof(buf), &p) < 0) {
3681                     goto fail;
3682                 }
3683                 opts = qemu_opts_parse(opts_list, buf, 1);
3684                 if (!opts) {
3685                     goto fail;
3686                 }
3687                 qemu_opts_to_qdict(opts, qdict);
3688                 qemu_opts_del(opts);
3689             }
3690             break;
3691         case '/':
3692             {
3693                 int count, format, size;
3694
3695                 while (qemu_isspace(*p))
3696                     p++;
3697                 if (*p == '/') {
3698                     /* format found */
3699                     p++;
3700                     count = 1;
3701                     if (qemu_isdigit(*p)) {
3702                         count = 0;
3703                         while (qemu_isdigit(*p)) {
3704                             count = count * 10 + (*p - '0');
3705                             p++;
3706                         }
3707                     }
3708                     size = -1;
3709                     format = -1;
3710                     for(;;) {
3711                         switch(*p) {
3712                         case 'o':
3713                         case 'd':
3714                         case 'u':
3715                         case 'x':
3716                         case 'i':
3717                         case 'c':
3718                             format = *p++;
3719                             break;
3720                         case 'b':
3721                             size = 1;
3722                             p++;
3723                             break;
3724                         case 'h':
3725                             size = 2;
3726                             p++;
3727                             break;
3728                         case 'w':
3729                             size = 4;
3730                             p++;
3731                             break;
3732                         case 'g':
3733                         case 'L':
3734                             size = 8;
3735                             p++;
3736                             break;
3737                         default:
3738                             goto next;
3739                         }
3740                     }
3741                 next:
3742                     if (*p != '\0' && !qemu_isspace(*p)) {
3743                         monitor_printf(mon, "invalid char in format: '%c'\n",
3744                                        *p);
3745                         goto fail;
3746                     }
3747                     if (format < 0)
3748                         format = default_fmt_format;
3749                     if (format != 'i') {
3750                         /* for 'i', not specifying a size gives -1 as size */
3751                         if (size < 0)
3752                             size = default_fmt_size;
3753                         default_fmt_size = size;
3754                     }
3755                     default_fmt_format = format;
3756                 } else {
3757                     count = 1;
3758                     format = default_fmt_format;
3759                     if (format != 'i') {
3760                         size = default_fmt_size;
3761                     } else {
3762                         size = -1;
3763                     }
3764                 }
3765                 qdict_put(qdict, "count", qint_from_int(count));
3766                 qdict_put(qdict, "format", qint_from_int(format));
3767                 qdict_put(qdict, "size", qint_from_int(size));
3768             }
3769             break;
3770         case 'i':
3771         case 'l':
3772         case 'M':
3773             {
3774                 int64_t val;
3775
3776                 while (qemu_isspace(*p))
3777                     p++;
3778                 if (*typestr == '?' || *typestr == '.') {
3779                     if (*typestr == '?') {
3780                         if (*p == '\0') {
3781                             typestr++;
3782                             break;
3783                         }
3784                     } else {
3785                         if (*p == '.') {
3786                             p++;
3787                             while (qemu_isspace(*p))
3788                                 p++;
3789                         } else {
3790                             typestr++;
3791                             break;
3792                         }
3793                     }
3794                     typestr++;
3795                 }
3796                 if (get_expr(mon, &val, &p))
3797                     goto fail;
3798                 /* Check if 'i' is greater than 32-bit */
3799                 if ((c == 'i') && ((val >> 32) & 0xffffffff)) {
3800                     monitor_printf(mon, "\'%s\' has failed: ", cmdname);
3801                     monitor_printf(mon, "integer is for 32-bit values\n");
3802                     goto fail;
3803                 } else if (c == 'M') {
3804                     if (val < 0) {
3805                         monitor_printf(mon, "enter a positive value\n");
3806                         goto fail;
3807                     }
3808                     val <<= 20;
3809                 }
3810                 qdict_put(qdict, key, qint_from_int(val));
3811             }
3812             break;
3813         case 'o':
3814             {
3815                 int64_t val;
3816                 char *end;
3817
3818                 while (qemu_isspace(*p)) {
3819                     p++;
3820                 }
3821                 if (*typestr == '?') {
3822                     typestr++;
3823                     if (*p == '\0') {
3824                         break;
3825                     }
3826                 }
3827                 val = strtosz(p, &end);
3828                 if (val < 0) {
3829                     monitor_printf(mon, "invalid size\n");
3830                     goto fail;
3831                 }
3832                 qdict_put(qdict, key, qint_from_int(val));
3833                 p = end;
3834             }
3835             break;
3836         case 'T':
3837             {
3838                 double val;
3839
3840                 while (qemu_isspace(*p))
3841                     p++;
3842                 if (*typestr == '?') {
3843                     typestr++;
3844                     if (*p == '\0') {
3845                         break;
3846                     }
3847                 }
3848                 if (get_double(mon, &val, &p) < 0) {
3849                     goto fail;
3850                 }
3851                 if (p[0] && p[1] == 's') {
3852                     switch (*p) {
3853                     case 'm':
3854                         val /= 1e3; p += 2; break;
3855                     case 'u':
3856                         val /= 1e6; p += 2; break;
3857                     case 'n':
3858                         val /= 1e9; p += 2; break;
3859                     }
3860                 }
3861                 if (*p && !qemu_isspace(*p)) {
3862                     monitor_printf(mon, "Unknown unit suffix\n");
3863                     goto fail;
3864                 }
3865                 qdict_put(qdict, key, qfloat_from_double(val));
3866             }
3867             break;
3868         case 'b':
3869             {
3870                 const char *beg;
3871                 int val;
3872
3873                 while (qemu_isspace(*p)) {
3874                     p++;
3875                 }
3876                 beg = p;
3877                 while (qemu_isgraph(*p)) {
3878                     p++;
3879                 }
3880                 if (p - beg == 2 && !memcmp(beg, "on", p - beg)) {
3881                     val = 1;
3882                 } else if (p - beg == 3 && !memcmp(beg, "off", p - beg)) {
3883                     val = 0;
3884                 } else {
3885                     monitor_printf(mon, "Expected 'on' or 'off'\n");
3886                     goto fail;
3887                 }
3888                 qdict_put(qdict, key, qbool_from_int(val));
3889             }
3890             break;
3891         case '-':
3892             {
3893                 const char *tmp = p;
3894                 int skip_key = 0;
3895                 /* option */
3896
3897                 c = *typestr++;
3898                 if (c == '\0')
3899                     goto bad_type;
3900                 while (qemu_isspace(*p))
3901                     p++;
3902                 if (*p == '-') {
3903                     p++;
3904                     if(c != *p) {
3905                         if(!is_valid_option(p, typestr)) {
3906                   
3907                             monitor_printf(mon, "%s: unsupported option -%c\n",
3908                                            cmdname, *p);
3909                             goto fail;
3910                         } else {
3911                             skip_key = 1;
3912                         }
3913                     }
3914                     if(skip_key) {
3915                         p = tmp;
3916                     } else {
3917                         /* has option */
3918                         p++;
3919                         qdict_put(qdict, key, qbool_from_int(1));
3920                     }
3921                 }
3922             }
3923             break;
3924         default:
3925         bad_type:
3926             monitor_printf(mon, "%s: unknown type '%c'\n", cmdname, c);
3927             goto fail;
3928         }
3929         g_free(key);
3930         key = NULL;
3931     }
3932     /* check that all arguments were parsed */
3933     while (qemu_isspace(*p))
3934         p++;
3935     if (*p != '\0') {
3936         monitor_printf(mon, "%s: extraneous characters at the end of line\n",
3937                        cmdname);
3938         goto fail;
3939     }
3940
3941     return cmd;
3942
3943 fail:
3944     g_free(key);
3945     return NULL;
3946 }
3947
3948 void monitor_set_error(Monitor *mon, QError *qerror)
3949 {
3950     /* report only the first error */
3951     if (!mon->error) {
3952         mon->error = qerror;
3953     } else {
3954         QDECREF(qerror);
3955     }
3956 }
3957
3958 static void handler_audit(Monitor *mon, const mon_cmd_t *cmd, int ret)
3959 {
3960     if (ret && !monitor_has_error(mon)) {
3961         /*
3962          * If it returns failure, it must have passed on error.
3963          *
3964          * Action: Report an internal error to the client if in QMP.
3965          */
3966         qerror_report(QERR_UNDEFINED_ERROR);
3967     }
3968 }
3969
3970 static void handle_user_command(Monitor *mon, const char *cmdline)
3971 {
3972     QDict *qdict;
3973     const mon_cmd_t *cmd;
3974
3975     qdict = qdict_new();
3976
3977     cmd = monitor_parse_command(mon, cmdline, 0, mon_cmds, qdict);
3978     if (!cmd)
3979         goto out;
3980
3981     if (handler_is_async(cmd)) {
3982         user_async_cmd_handler(mon, cmd, qdict);
3983     } else if (handler_is_qobject(cmd)) {
3984         QObject *data = NULL;
3985
3986         /* XXX: ignores the error code */
3987         cmd->mhandler.cmd_new(mon, qdict, &data);
3988         assert(!monitor_has_error(mon));
3989         if (data) {
3990             cmd->user_print(mon, data);
3991             qobject_decref(data);
3992         }
3993     } else {
3994         cmd->mhandler.cmd(mon, qdict);
3995     }
3996
3997 out:
3998     QDECREF(qdict);
3999 }
4000
4001 static void cmd_completion(const char *name, const char *list)
4002 {
4003     const char *p, *pstart;
4004     char cmd[128];
4005     int len;
4006
4007     p = list;
4008     for(;;) {
4009         pstart = p;
4010         p = strchr(p, '|');
4011         if (!p)
4012             p = pstart + strlen(pstart);
4013         len = p - pstart;
4014         if (len > sizeof(cmd) - 2)
4015             len = sizeof(cmd) - 2;
4016         memcpy(cmd, pstart, len);
4017         cmd[len] = '\0';
4018         if (name[0] == '\0' || !strncmp(name, cmd, strlen(name))) {
4019             readline_add_completion(cur_mon->rs, cmd);
4020         }
4021         if (*p == '\0')
4022             break;
4023         p++;
4024     }
4025 }
4026
4027 static void file_completion(const char *input)
4028 {
4029     DIR *ffs;
4030     struct dirent *d;
4031     char path[1024];
4032     char file[1024], file_prefix[1024];
4033     int input_path_len;
4034     const char *p;
4035
4036     p = strrchr(input, '/');
4037     if (!p) {
4038         input_path_len = 0;
4039         pstrcpy(file_prefix, sizeof(file_prefix), input);
4040         pstrcpy(path, sizeof(path), ".");
4041     } else {
4042         input_path_len = p - input + 1;
4043         memcpy(path, input, input_path_len);
4044         if (input_path_len > sizeof(path) - 1)
4045             input_path_len = sizeof(path) - 1;
4046         path[input_path_len] = '\0';
4047         pstrcpy(file_prefix, sizeof(file_prefix), p + 1);
4048     }
4049 #ifdef DEBUG_COMPLETION
4050     monitor_printf(cur_mon, "input='%s' path='%s' prefix='%s'\n",
4051                    input, path, file_prefix);
4052 #endif
4053     ffs = opendir(path);
4054     if (!ffs)
4055         return;
4056     for(;;) {
4057         struct stat sb;
4058         d = readdir(ffs);
4059         if (!d)
4060             break;
4061
4062         if (strcmp(d->d_name, ".") == 0 || strcmp(d->d_name, "..") == 0) {
4063             continue;
4064         }
4065
4066         if (strstart(d->d_name, file_prefix, NULL)) {
4067             memcpy(file, input, input_path_len);
4068             if (input_path_len < sizeof(file))
4069                 pstrcpy(file + input_path_len, sizeof(file) - input_path_len,
4070                         d->d_name);
4071             /* stat the file to find out if it's a directory.
4072              * In that case add a slash to speed up typing long paths
4073              */
4074             if (stat(file, &sb) == 0 && S_ISDIR(sb.st_mode)) {
4075                 pstrcat(file, sizeof(file), "/");
4076             }
4077             readline_add_completion(cur_mon->rs, file);
4078         }
4079     }
4080     closedir(ffs);
4081 }
4082
4083 static void block_completion_it(void *opaque, BlockDriverState *bs)
4084 {
4085     const char *name = bdrv_get_device_name(bs);
4086     const char *input = opaque;
4087
4088     if (input[0] == '\0' ||
4089         !strncmp(name, (char *)input, strlen(input))) {
4090         readline_add_completion(cur_mon->rs, name);
4091     }
4092 }
4093
4094 /* NOTE: this parser is an approximate form of the real command parser */
4095 static void parse_cmdline(const char *cmdline,
4096                          int *pnb_args, char **args)
4097 {
4098     const char *p;
4099     int nb_args, ret;
4100     char buf[1024];
4101
4102     p = cmdline;
4103     nb_args = 0;
4104     for(;;) {
4105         while (qemu_isspace(*p))
4106             p++;
4107         if (*p == '\0')
4108             break;
4109         if (nb_args >= MAX_ARGS)
4110             break;
4111         ret = get_str(buf, sizeof(buf), &p);
4112         args[nb_args] = g_strdup(buf);
4113         nb_args++;
4114         if (ret < 0)
4115             break;
4116     }
4117     *pnb_args = nb_args;
4118 }
4119
4120 static const char *next_arg_type(const char *typestr)
4121 {
4122     const char *p = strchr(typestr, ':');
4123     return (p != NULL ? ++p : typestr);
4124 }
4125
4126 static void monitor_find_completion(const char *cmdline)
4127 {
4128     const char *cmdname;
4129     char *args[MAX_ARGS];
4130     int nb_args, i, len;
4131     const char *ptype, *str;
4132     const mon_cmd_t *cmd;
4133
4134     parse_cmdline(cmdline, &nb_args, args);
4135 #ifdef DEBUG_COMPLETION
4136     for(i = 0; i < nb_args; i++) {
4137         monitor_printf(cur_mon, "arg%d = '%s'\n", i, (char *)args[i]);
4138     }
4139 #endif
4140
4141     /* if the line ends with a space, it means we want to complete the
4142        next arg */
4143     len = strlen(cmdline);
4144     if (len > 0 && qemu_isspace(cmdline[len - 1])) {
4145         if (nb_args >= MAX_ARGS) {
4146             goto cleanup;
4147         }
4148         args[nb_args++] = g_strdup("");
4149     }
4150     if (nb_args <= 1) {
4151         /* command completion */
4152         if (nb_args == 0)
4153             cmdname = "";
4154         else
4155             cmdname = args[0];
4156         readline_set_completion_index(cur_mon->rs, strlen(cmdname));
4157         for(cmd = mon_cmds; cmd->name != NULL; cmd++) {
4158             cmd_completion(cmdname, cmd->name);
4159         }
4160     } else {
4161         /* find the command */
4162         for (cmd = mon_cmds; cmd->name != NULL; cmd++) {
4163             if (compare_cmd(args[0], cmd->name)) {
4164                 break;
4165             }
4166         }
4167         if (!cmd->name) {
4168             goto cleanup;
4169         }
4170
4171         ptype = next_arg_type(cmd->args_type);
4172         for(i = 0; i < nb_args - 2; i++) {
4173             if (*ptype != '\0') {
4174                 ptype = next_arg_type(ptype);
4175                 while (*ptype == '?')
4176                     ptype = next_arg_type(ptype);
4177             }
4178         }
4179         str = args[nb_args - 1];
4180         if (*ptype == '-' && ptype[1] != '\0') {
4181             ptype = next_arg_type(ptype);
4182         }
4183         switch(*ptype) {
4184         case 'F':
4185             /* file completion */
4186             readline_set_completion_index(cur_mon->rs, strlen(str));
4187             file_completion(str);
4188             break;
4189         case 'B':
4190             /* block device name completion */
4191             readline_set_completion_index(cur_mon->rs, strlen(str));
4192             bdrv_iterate(block_completion_it, (void *)str);
4193             break;
4194         case 's':
4195             /* XXX: more generic ? */
4196             if (!strcmp(cmd->name, "info")) {
4197                 readline_set_completion_index(cur_mon->rs, strlen(str));
4198                 for(cmd = info_cmds; cmd->name != NULL; cmd++) {
4199                     cmd_completion(str, cmd->name);
4200                 }
4201             } else if (!strcmp(cmd->name, "sendkey")) {
4202                 char *sep = strrchr(str, '-');
4203                 if (sep)
4204                     str = sep + 1;
4205                 readline_set_completion_index(cur_mon->rs, strlen(str));
4206                 for (i = 0; i < Q_KEY_CODE_MAX; i++) {
4207                     cmd_completion(str, QKeyCode_lookup[i]);
4208                 }
4209             } else if (!strcmp(cmd->name, "help|?")) {
4210                 readline_set_completion_index(cur_mon->rs, strlen(str));
4211                 for (cmd = mon_cmds; cmd->name != NULL; cmd++) {
4212                     cmd_completion(str, cmd->name);
4213                 }
4214             }
4215             break;
4216         default:
4217             break;
4218         }
4219     }
4220
4221 cleanup:
4222     for (i = 0; i < nb_args; i++) {
4223         g_free(args[i]);
4224     }
4225 }
4226
4227 static int monitor_can_read(void *opaque)
4228 {
4229     Monitor *mon = opaque;
4230
4231     return (mon->suspend_cnt == 0) ? 1 : 0;
4232 }
4233
4234 static int invalid_qmp_mode(const Monitor *mon, const char *cmd_name)
4235 {
4236     int is_cap = compare_cmd(cmd_name, "qmp_capabilities");
4237     return (qmp_cmd_mode(mon) ? is_cap : !is_cap);
4238 }
4239
4240 /*
4241  * Argument validation rules:
4242  *
4243  * 1. The argument must exist in cmd_args qdict
4244  * 2. The argument type must be the expected one
4245  *
4246  * Special case: If the argument doesn't exist in cmd_args and
4247  *               the QMP_ACCEPT_UNKNOWNS flag is set, then the
4248  *               checking is skipped for it.
4249  */
4250 static int check_client_args_type(const QDict *client_args,
4251                                   const QDict *cmd_args, int flags)
4252 {
4253     const QDictEntry *ent;
4254
4255     for (ent = qdict_first(client_args); ent;ent = qdict_next(client_args,ent)){
4256         QObject *obj;
4257         QString *arg_type;
4258         const QObject *client_arg = qdict_entry_value(ent);
4259         const char *client_arg_name = qdict_entry_key(ent);
4260
4261         obj = qdict_get(cmd_args, client_arg_name);
4262         if (!obj) {
4263             if (flags & QMP_ACCEPT_UNKNOWNS) {
4264                 /* handler accepts unknowns */
4265                 continue;
4266             }
4267             /* client arg doesn't exist */
4268             qerror_report(QERR_INVALID_PARAMETER, client_arg_name);
4269             return -1;
4270         }
4271
4272         arg_type = qobject_to_qstring(obj);
4273         assert(arg_type != NULL);
4274
4275         /* check if argument's type is correct */
4276         switch (qstring_get_str(arg_type)[0]) {
4277         case 'F':
4278         case 'B':
4279         case 's':
4280             if (qobject_type(client_arg) != QTYPE_QSTRING) {
4281                 qerror_report(QERR_INVALID_PARAMETER_TYPE, client_arg_name,
4282                               "string");
4283                 return -1;
4284             }
4285         break;
4286         case 'i':
4287         case 'l':
4288         case 'M':
4289         case 'o':
4290             if (qobject_type(client_arg) != QTYPE_QINT) {
4291                 qerror_report(QERR_INVALID_PARAMETER_TYPE, client_arg_name,
4292                               "int");
4293                 return -1; 
4294             }
4295             break;
4296         case 'T':
4297             if (qobject_type(client_arg) != QTYPE_QINT &&
4298                 qobject_type(client_arg) != QTYPE_QFLOAT) {
4299                 qerror_report(QERR_INVALID_PARAMETER_TYPE, client_arg_name,
4300                               "number");
4301                return -1; 
4302             }
4303             break;
4304         case 'b':
4305         case '-':
4306             if (qobject_type(client_arg) != QTYPE_QBOOL) {
4307                 qerror_report(QERR_INVALID_PARAMETER_TYPE, client_arg_name,
4308                               "bool");
4309                return -1; 
4310             }
4311             break;
4312         case 'O':
4313             assert(flags & QMP_ACCEPT_UNKNOWNS);
4314             break;
4315         case 'q':
4316             /* Any QObject can be passed.  */
4317             break;
4318         case '/':
4319         case '.':
4320             /*
4321              * These types are not supported by QMP and thus are not
4322              * handled here. Fall through.
4323              */
4324         default:
4325             abort();
4326         }
4327     }
4328
4329     return 0;
4330 }
4331
4332 /*
4333  * - Check if the client has passed all mandatory args
4334  * - Set special flags for argument validation
4335  */
4336 static int check_mandatory_args(const QDict *cmd_args,
4337                                 const QDict *client_args, int *flags)
4338 {
4339     const QDictEntry *ent;
4340
4341     for (ent = qdict_first(cmd_args); ent; ent = qdict_next(cmd_args, ent)) {
4342         const char *cmd_arg_name = qdict_entry_key(ent);
4343         QString *type = qobject_to_qstring(qdict_entry_value(ent));
4344         assert(type != NULL);
4345
4346         if (qstring_get_str(type)[0] == 'O') {
4347             assert((*flags & QMP_ACCEPT_UNKNOWNS) == 0);
4348             *flags |= QMP_ACCEPT_UNKNOWNS;
4349         } else if (qstring_get_str(type)[0] != '-' &&
4350                    qstring_get_str(type)[1] != '?' &&
4351                    !qdict_haskey(client_args, cmd_arg_name)) {
4352             qerror_report(QERR_MISSING_PARAMETER, cmd_arg_name);
4353             return -1;
4354         }
4355     }
4356
4357     return 0;
4358 }
4359
4360 static QDict *qdict_from_args_type(const char *args_type)
4361 {
4362     int i;
4363     QDict *qdict;
4364     QString *key, *type, *cur_qs;
4365
4366     assert(args_type != NULL);
4367
4368     qdict = qdict_new();
4369
4370     if (args_type == NULL || args_type[0] == '\0') {
4371         /* no args, empty qdict */
4372         goto out;
4373     }
4374
4375     key = qstring_new();
4376     type = qstring_new();
4377
4378     cur_qs = key;
4379
4380     for (i = 0;; i++) {
4381         switch (args_type[i]) {
4382             case ',':
4383             case '\0':
4384                 qdict_put(qdict, qstring_get_str(key), type);
4385                 QDECREF(key);
4386                 if (args_type[i] == '\0') {
4387                     goto out;
4388                 }
4389                 type = qstring_new(); /* qdict has ref */
4390                 cur_qs = key = qstring_new();
4391                 break;
4392             case ':':
4393                 cur_qs = type;
4394                 break;
4395             default:
4396                 qstring_append_chr(cur_qs, args_type[i]);
4397                 break;
4398         }
4399     }
4400
4401 out:
4402     return qdict;
4403 }
4404
4405 /*
4406  * Client argument checking rules:
4407  *
4408  * 1. Client must provide all mandatory arguments
4409  * 2. Each argument provided by the client must be expected
4410  * 3. Each argument provided by the client must have the type expected
4411  *    by the command
4412  */
4413 static int qmp_check_client_args(const mon_cmd_t *cmd, QDict *client_args)
4414 {
4415     int flags, err;
4416     QDict *cmd_args;
4417
4418     cmd_args = qdict_from_args_type(cmd->args_type);
4419
4420     flags = 0;
4421     err = check_mandatory_args(cmd_args, client_args, &flags);
4422     if (err) {
4423         goto out;
4424     }
4425
4426     err = check_client_args_type(client_args, cmd_args, flags);
4427
4428 out:
4429     QDECREF(cmd_args);
4430     return err;
4431 }
4432
4433 /*
4434  * Input object checking rules
4435  *
4436  * 1. Input object must be a dict
4437  * 2. The "execute" key must exist
4438  * 3. The "execute" key must be a string
4439  * 4. If the "arguments" key exists, it must be a dict
4440  * 5. If the "id" key exists, it can be anything (ie. json-value)
4441  * 6. Any argument not listed above is considered invalid
4442  */
4443 static QDict *qmp_check_input_obj(QObject *input_obj)
4444 {
4445     const QDictEntry *ent;
4446     int has_exec_key = 0;
4447     QDict *input_dict;
4448
4449     if (qobject_type(input_obj) != QTYPE_QDICT) {
4450         qerror_report(QERR_QMP_BAD_INPUT_OBJECT, "object");
4451         return NULL;
4452     }
4453
4454     input_dict = qobject_to_qdict(input_obj);
4455
4456     for (ent = qdict_first(input_dict); ent; ent = qdict_next(input_dict, ent)){
4457         const char *arg_name = qdict_entry_key(ent);
4458         const QObject *arg_obj = qdict_entry_value(ent);
4459
4460         if (!strcmp(arg_name, "execute")) {
4461             if (qobject_type(arg_obj) != QTYPE_QSTRING) {
4462                 qerror_report(QERR_QMP_BAD_INPUT_OBJECT_MEMBER, "execute",
4463                               "string");
4464                 return NULL;
4465             }
4466             has_exec_key = 1;
4467         } else if (!strcmp(arg_name, "arguments")) {
4468             if (qobject_type(arg_obj) != QTYPE_QDICT) {
4469                 qerror_report(QERR_QMP_BAD_INPUT_OBJECT_MEMBER, "arguments",
4470                               "object");
4471                 return NULL;
4472             }
4473         } else if (!strcmp(arg_name, "id")) {
4474             /* FIXME: check duplicated IDs for async commands */
4475         } else {
4476             qerror_report(QERR_QMP_EXTRA_MEMBER, arg_name);
4477             return NULL;
4478         }
4479     }
4480
4481     if (!has_exec_key) {
4482         qerror_report(QERR_QMP_BAD_INPUT_OBJECT, "execute");
4483         return NULL;
4484     }
4485
4486     return input_dict;
4487 }
4488
4489 static void qmp_call_cmd(Monitor *mon, const mon_cmd_t *cmd,
4490                          const QDict *params)
4491 {
4492     int ret;
4493     QObject *data = NULL;
4494
4495     ret = cmd->mhandler.cmd_new(mon, params, &data);
4496     handler_audit(mon, cmd, ret);
4497     monitor_protocol_emitter(mon, data);
4498     qobject_decref(data);
4499 }
4500
4501 static void handle_qmp_command(JSONMessageParser *parser, QList *tokens)
4502 {
4503     int err;
4504     QObject *obj;
4505     QDict *input, *args;
4506     const mon_cmd_t *cmd;
4507     const char *cmd_name;
4508     Monitor *mon = cur_mon;
4509
4510     args = input = NULL;
4511
4512     obj = json_parser_parse(tokens, NULL);
4513     if (!obj) {
4514         // FIXME: should be triggered in json_parser_parse()
4515         qerror_report(QERR_JSON_PARSING);
4516         goto err_out;
4517     }
4518
4519     input = qmp_check_input_obj(obj);
4520     if (!input) {
4521         qobject_decref(obj);
4522         goto err_out;
4523     }
4524
4525     mon->mc->id = qdict_get(input, "id");
4526     qobject_incref(mon->mc->id);
4527
4528     cmd_name = qdict_get_str(input, "execute");
4529     trace_handle_qmp_command(mon, cmd_name);
4530     if (invalid_qmp_mode(mon, cmd_name)) {
4531         qerror_report(QERR_COMMAND_NOT_FOUND, cmd_name);
4532         goto err_out;
4533     }
4534
4535     cmd = qmp_find_cmd(cmd_name);
4536     if (!cmd) {
4537         qerror_report(QERR_COMMAND_NOT_FOUND, cmd_name);
4538         goto err_out;
4539     }
4540
4541     obj = qdict_get(input, "arguments");
4542     if (!obj) {
4543         args = qdict_new();
4544     } else {
4545         args = qobject_to_qdict(obj);
4546         QINCREF(args);
4547     }
4548
4549     err = qmp_check_client_args(cmd, args);
4550     if (err < 0) {
4551         goto err_out;
4552     }
4553
4554     if (handler_is_async(cmd)) {
4555         err = qmp_async_cmd_handler(mon, cmd, args);
4556         if (err) {
4557             /* emit the error response */
4558             goto err_out;
4559         }
4560     } else {
4561         qmp_call_cmd(mon, cmd, args);
4562     }
4563
4564     goto out;
4565
4566 err_out:
4567     monitor_protocol_emitter(mon, NULL);
4568 out:
4569     QDECREF(input);
4570     QDECREF(args);
4571 }
4572
4573 /**
4574  * monitor_control_read(): Read and handle QMP input
4575  */
4576 static void monitor_control_read(void *opaque, const uint8_t *buf, int size)
4577 {
4578     Monitor *old_mon = cur_mon;
4579
4580     cur_mon = opaque;
4581
4582     json_message_parser_feed(&cur_mon->mc->parser, (const char *) buf, size);
4583
4584     cur_mon = old_mon;
4585 }
4586
4587 static void monitor_read(void *opaque, const uint8_t *buf, int size)
4588 {
4589     Monitor *old_mon = cur_mon;
4590     int i;
4591
4592     cur_mon = opaque;
4593
4594     if (cur_mon->rs) {
4595         for (i = 0; i < size; i++)
4596             readline_handle_byte(cur_mon->rs, buf[i]);
4597     } else {
4598         if (size == 0 || buf[size - 1] != 0)
4599             monitor_printf(cur_mon, "corrupted command\n");
4600         else
4601             handle_user_command(cur_mon, (char *)buf);
4602     }
4603
4604     cur_mon = old_mon;
4605 }
4606
4607 static void monitor_command_cb(Monitor *mon, const char *cmdline, void *opaque)
4608 {
4609     monitor_suspend(mon);
4610     handle_user_command(mon, cmdline);
4611     monitor_resume(mon);
4612 }
4613
4614 int monitor_suspend(Monitor *mon)
4615 {
4616     if (!mon->rs)
4617         return -ENOTTY;
4618     mon->suspend_cnt++;
4619     return 0;
4620 }
4621
4622 void monitor_resume(Monitor *mon)
4623 {
4624     if (!mon->rs)
4625         return;
4626     if (--mon->suspend_cnt == 0)
4627         readline_show_prompt(mon->rs);
4628 }
4629
4630 static QObject *get_qmp_greeting(void)
4631 {
4632     QObject *ver = NULL;
4633
4634     qmp_marshal_input_query_version(NULL, NULL, &ver);
4635     return qobject_from_jsonf("{'QMP':{'version': %p,'capabilities': []}}",ver);
4636 }
4637
4638 /**
4639  * monitor_control_event(): Print QMP gretting
4640  */
4641 static void monitor_control_event(void *opaque, int event)
4642 {
4643     QObject *data;
4644     Monitor *mon = opaque;
4645
4646     switch (event) {
4647     case CHR_EVENT_OPENED:
4648         mon->mc->command_mode = 0;
4649         data = get_qmp_greeting();
4650         monitor_json_emitter(mon, data);
4651         qobject_decref(data);
4652         mon_refcount++;
4653         break;
4654     case CHR_EVENT_CLOSED:
4655         json_message_parser_destroy(&mon->mc->parser);
4656         json_message_parser_init(&mon->mc->parser, handle_qmp_command);
4657         mon_refcount--;
4658         monitor_fdsets_cleanup();
4659         break;
4660     }
4661 }
4662
4663 static void monitor_event(void *opaque, int event)
4664 {
4665     Monitor *mon = opaque;
4666
4667     switch (event) {
4668     case CHR_EVENT_MUX_IN:
4669         mon->mux_out = 0;
4670         if (mon->reset_seen) {
4671             readline_restart(mon->rs);
4672             monitor_resume(mon);
4673             monitor_flush(mon);
4674         } else {
4675             mon->suspend_cnt = 0;
4676         }
4677         break;
4678
4679     case CHR_EVENT_MUX_OUT:
4680         if (mon->reset_seen) {
4681             if (mon->suspend_cnt == 0) {
4682                 monitor_printf(mon, "\n");
4683             }
4684             monitor_flush(mon);
4685             monitor_suspend(mon);
4686         } else {
4687             mon->suspend_cnt++;
4688         }
4689         mon->mux_out = 1;
4690         break;
4691
4692     case CHR_EVENT_OPENED:
4693         monitor_printf(mon, "QEMU %s monitor - type 'help' for more "
4694                        "information\n", QEMU_VERSION);
4695         if (!mon->mux_out) {
4696             readline_show_prompt(mon->rs);
4697         }
4698         mon->reset_seen = 1;
4699         mon_refcount++;
4700         break;
4701
4702     case CHR_EVENT_CLOSED:
4703         mon_refcount--;
4704         monitor_fdsets_cleanup();
4705         break;
4706     }
4707 }
4708
4709 static int
4710 compare_mon_cmd(const void *a, const void *b)
4711 {
4712     return strcmp(((const mon_cmd_t *)a)->name,
4713             ((const mon_cmd_t *)b)->name);
4714 }
4715
4716 static void sortcmdlist(void)
4717 {
4718     int array_num;
4719     int elem_size = sizeof(mon_cmd_t);
4720
4721     array_num = sizeof(mon_cmds)/elem_size-1;
4722     qsort((void *)mon_cmds, array_num, elem_size, compare_mon_cmd);
4723
4724     array_num = sizeof(info_cmds)/elem_size-1;
4725     qsort((void *)info_cmds, array_num, elem_size, compare_mon_cmd);
4726 }
4727
4728
4729 /*
4730  * Local variables:
4731  *  c-indent-level: 4
4732  *  c-basic-offset: 4
4733  *  tab-width: 8
4734  * End:
4735  */
4736
4737 void monitor_init(CharDriverState *chr, int flags)
4738 {
4739     static int is_first_init = 1;
4740     Monitor *mon;
4741
4742     if (is_first_init) {
4743         monitor_protocol_event_init();
4744         is_first_init = 0;
4745     }
4746
4747     mon = g_malloc0(sizeof(*mon));
4748     mon->outbuf = qstring_new();
4749
4750     mon->chr = chr;
4751     mon->flags = flags;
4752     if (flags & MONITOR_USE_READLINE) {
4753         mon->rs = readline_init(mon, monitor_find_completion);
4754         monitor_read_command(mon, 0);
4755     }
4756
4757     if (monitor_ctrl_mode(mon)) {
4758         mon->mc = g_malloc0(sizeof(MonitorControl));
4759         /* Control mode requires special handlers */
4760         qemu_chr_add_handlers(chr, monitor_can_read, monitor_control_read,
4761                               monitor_control_event, mon);
4762         qemu_chr_fe_set_echo(chr, true);
4763
4764         json_message_parser_init(&mon->mc->parser, handle_qmp_command);
4765     } else {
4766         qemu_chr_add_handlers(chr, monitor_can_read, monitor_read,
4767                               monitor_event, mon);
4768     }
4769
4770     QLIST_INSERT_HEAD(&mon_list, mon, entry);
4771     if (!default_mon || (flags & MONITOR_IS_DEFAULT))
4772         default_mon = mon;
4773
4774     sortcmdlist();
4775 }
4776
4777 static void bdrv_password_cb(Monitor *mon, const char *password, void *opaque)
4778 {
4779     BlockDriverState *bs = opaque;
4780     int ret = 0;
4781
4782     if (bdrv_set_key(bs, password) != 0) {
4783         monitor_printf(mon, "invalid password\n");
4784         ret = -EPERM;
4785     }
4786     if (mon->password_completion_cb)
4787         mon->password_completion_cb(mon->password_opaque, ret);
4788
4789     monitor_read_command(mon, 1);
4790 }
4791
4792 ReadLineState *monitor_get_rs(Monitor *mon)
4793 {
4794     return mon->rs;
4795 }
4796
4797 int monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs,
4798                                 BlockDriverCompletionFunc *completion_cb,
4799                                 void *opaque)
4800 {
4801     int err;
4802
4803     if (!bdrv_key_required(bs)) {
4804         if (completion_cb)
4805             completion_cb(opaque, 0);
4806         return 0;
4807     }
4808
4809     if (monitor_ctrl_mode(mon)) {
4810         qerror_report(QERR_DEVICE_ENCRYPTED, bdrv_get_device_name(bs),
4811                       bdrv_get_encrypted_filename(bs));
4812         return -1;
4813     }
4814
4815     monitor_printf(mon, "%s (%s) is encrypted.\n", bdrv_get_device_name(bs),
4816                    bdrv_get_encrypted_filename(bs));
4817
4818     mon->password_completion_cb = completion_cb;
4819     mon->password_opaque = opaque;
4820
4821     err = monitor_read_password(mon, bdrv_password_cb, bs);
4822
4823     if (err && completion_cb)
4824         completion_cb(opaque, err);
4825
4826     return err;
4827 }
4828
4829 int monitor_read_block_device_key(Monitor *mon, const char *device,
4830                                   BlockDriverCompletionFunc *completion_cb,
4831                                   void *opaque)
4832 {
4833     BlockDriverState *bs;
4834
4835     bs = bdrv_find(device);
4836     if (!bs) {
4837         monitor_printf(mon, "Device not found %s\n", device);
4838         return -1;
4839     }
4840
4841     return monitor_read_bdrv_key_start(mon, bs, completion_cb, opaque);
4842 }
4843
4844 QemuOptsList qemu_mon_opts = {
4845     .name = "mon",
4846     .implied_opt_name = "chardev",
4847     .head = QTAILQ_HEAD_INITIALIZER(qemu_mon_opts.head),
4848     .desc = {
4849         {
4850             .name = "mode",
4851             .type = QEMU_OPT_STRING,
4852         },{
4853             .name = "chardev",
4854             .type = QEMU_OPT_STRING,
4855         },{
4856             .name = "default",
4857             .type = QEMU_OPT_BOOL,
4858         },{
4859             .name = "pretty",
4860             .type = QEMU_OPT_BOOL,
4861         },
4862         { /* end of list */ }
4863     },
4864 };