aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Turner <digit@android.com>2010-09-10 00:17:41 +0200
committerDavid 'Digit' Turner <digit@android.com>2010-09-13 00:30:34 -0700
commitedd33969474fd39ed2aa61f4b07b83ee3e586f9c (patch)
tree6d6caea7ab0e2e48a279c7ea921e4969cd8605b8
parentd96c9f4e20a892de38a3515dccf437ec079ebb9a (diff)
downloadexternal_qemu-edd33969474fd39ed2aa61f4b07b83ee3e586f9c.zip
external_qemu-edd33969474fd39ed2aa61f4b07b83ee3e586f9c.tar.gz
external_qemu-edd33969474fd39ed2aa61f4b07b83ee3e586f9c.tar.bz2
upstream: monitor.h
-rw-r--r--Makefile.android2
-rw-r--r--monitor.c49
-rw-r--r--monitor.h44
3 files changed, 87 insertions, 8 deletions
diff --git a/Makefile.android b/Makefile.android
index a7006b8..4e796d9 100644
--- a/Makefile.android
+++ b/Makefile.android
@@ -634,6 +634,8 @@ CORE_MISC_SOURCES = vl-android.c \
monitor.c \
readline.c \
qemu-char-android.c \
+ qemu-error.c \
+ qerror.c \
disas.c \
arm-dis.c \
aes.c \
diff --git a/monitor.c b/monitor.c
index 3c23397..fb4d907 100644
--- a/monitor.c
+++ b/monitor.c
@@ -96,6 +96,24 @@ Monitor *cur_mon = NULL;
static void monitor_command_cb(Monitor *mon, const char *cmdline,
void *opaque);
+static inline int qmp_cmd_mode(const Monitor *mon)
+{
+ //return (mon->mc ? mon->mc->command_mode : 0);
+ return 0;
+}
+
+/* Return true if in control mode, false otherwise */
+static inline int monitor_ctrl_mode(const Monitor *mon)
+{
+ return (mon->flags & MONITOR_USE_CONTROL);
+}
+
+/* Return non-zero iff we have a current monitor, and it is in QMP mode. */
+int monitor_cur_is_qmp(void)
+{
+ return cur_mon && monitor_ctrl_mode(cur_mon);
+}
+
static void monitor_read_command(Monitor *mon, int show_prompt)
{
readline_start(mon->rs, "(qemu) ", 0, monitor_command_cb, NULL);
@@ -2739,6 +2757,22 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
qemu_free(str_allocated[i]);
}
+void monitor_set_error(Monitor *mon, QError *qerror)
+{
+#if 1
+ QDECREF(qerror);
+#else
+ /* report only the first error */
+ if (!mon->error) {
+ mon->error = qerror;
+ } else {
+ MON_DEBUG("Additional error report at %s:%d\n",
+ qerror->file, qerror->linenr);
+ QDECREF(qerror);
+ }
+#endif
+}
+
static void cmd_completion(const char *name, const char *list)
{
const char *p, *pstart;
@@ -3088,16 +3122,21 @@ static void bdrv_password_cb(Monitor *mon, const char *password, void *opaque)
monitor_read_command(mon, 1);
}
-void monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs,
- BlockDriverCompletionFunc *completion_cb,
- void *opaque)
+int monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs,
+ BlockDriverCompletionFunc *completion_cb,
+ void *opaque)
{
int err;
if (!bdrv_key_required(bs)) {
if (completion_cb)
completion_cb(opaque, 0);
- return;
+ return 0;
+ }
+
+ if (monitor_ctrl_mode(mon)) {
+ qerror_report(QERR_DEVICE_ENCRYPTED, bdrv_get_device_name(bs));
+ return -1;
}
monitor_printf(mon, "%s (%s) is encrypted.\n", bdrv_get_device_name(bs),
@@ -3110,4 +3149,6 @@ void monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs,
if (err && completion_cb)
completion_cb(opaque, err);
+
+ return err;
}
diff --git a/monitor.h b/monitor.h
index 5a4eef8..2d478fc 100644
--- a/monitor.h
+++ b/monitor.h
@@ -3,23 +3,55 @@
#include "qemu-common.h"
#include "qemu-char.h"
+#include "qerror.h"
+#include "qdict.h"
#include "block.h"
extern Monitor *cur_mon;
+extern Monitor *default_mon;
/* flags for monitor_init */
#define MONITOR_IS_DEFAULT 0x01
#define MONITOR_USE_READLINE 0x02
-#define MONITOR_QUIT_DOESNT_EXIT 0x04 /* prevent 'quit' from exiting the emulator */
+#define MONITOR_IS_DEFAULT 0x01
+#define MONITOR_USE_READLINE 0x02
+#define MONITOR_USE_CONTROL 0x04
+#define MONITOR_QUIT_DOESNT_EXIT 0x08 /* prevent 'quit' from exiting the emulator */
+
+/* flags for monitor commands */
+#define MONITOR_CMD_ASYNC 0x0001
+#define MONITOR_CMD_USER_ONLY 0x0002
+
+/* QMP events */
+typedef enum MonitorEvent {
+ QEVENT_SHUTDOWN,
+ QEVENT_RESET,
+ QEVENT_POWERDOWN,
+ QEVENT_STOP,
+ QEVENT_RESUME,
+ QEVENT_VNC_CONNECTED,
+ QEVENT_VNC_INITIALIZED,
+ QEVENT_VNC_DISCONNECTED,
+ QEVENT_BLOCK_IO_ERROR,
+ QEVENT_RTC_CHANGE,
+ QEVENT_WATCHDOG,
+ QEVENT_MAX,
+} MonitorEvent;
+
+int monitor_cur_is_qmp(void);
+
+void monitor_protocol_event(MonitorEvent event, QObject *data);
void monitor_init(CharDriverState *chr, int flags);
int monitor_suspend(Monitor *mon);
void monitor_resume(Monitor *mon);
-void monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs,
- BlockDriverCompletionFunc *completion_cb,
- void *opaque);
+int monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs,
+ BlockDriverCompletionFunc *completion_cb,
+ void *opaque);
+
+int monitor_get_fd(Monitor *mon, const char *fdname);
void monitor_vprintf(Monitor *mon, const char *fmt, va_list ap);
void monitor_printf(Monitor *mon, const char *fmt, ...)
@@ -27,4 +59,8 @@ void monitor_printf(Monitor *mon, const char *fmt, ...)
void monitor_print_filename(Monitor *mon, const char *filename);
void monitor_flush(Monitor *mon);
+typedef void (MonitorCompletion)(void *opaque, QObject *ret_data);
+
+void monitor_set_error(Monitor *mon, QError *qerror);
+
#endif /* !MONITOR_H */