#include "hw/usb.h"
#include "hw/baum.h"
#include "hw/msmouse.h"
-#include "qemu-objects.h"
+#include "qmp-commands.h"
#include <unistd.h>
#include <fcntl.h>
return s->chr_write(s, buf, len);
}
-int qemu_chr_ioctl(CharDriverState *s, int cmd, void *arg)
+int qemu_chr_fe_ioctl(CharDriverState *s, int cmd, void *arg)
{
if (!s->chr_ioctl)
return -ENOTSUP;
s->chr_read(s->handler_opaque, buf, len);
}
-int qemu_chr_get_msgfd(CharDriverState *s)
+int qemu_chr_fe_get_msgfd(CharDriverState *s)
{
return s->get_msgfd ? s->get_msgfd(s) : -1;
}
va_end(ap);
}
-void qemu_chr_send_event(CharDriverState *s, int event)
-{
- if (s->chr_send_event)
- s->chr_send_event(s, event);
-}
-
void qemu_chr_add_handlers(CharDriverState *s,
IOCanReadHandler *fd_can_read,
IOReadHandler *fd_read,
stdio_nb_clients++;
stdio_allow_signal = qemu_opt_get_bool(opts, "signal",
display_type != DT_NOGRAPHIC);
- qemu_chr_set_echo(chr, false);
+ qemu_chr_fe_set_echo(chr, false);
*_chr = chr;
return 0;
chr->chr_close = win_chr_close;
if (win_chr_init(chr, filename) < 0) {
- free(s);
- free(chr);
+ g_free(s);
+ g_free(chr);
return -EIO;
}
qemu_chr_generic_open(chr);
chr->chr_close = win_chr_close;
if (win_chr_pipe_init(chr, filename) < 0) {
- free(s);
- free(chr);
+ g_free(s);
+ g_free(chr);
return -EIO;
}
qemu_chr_generic_open(chr);
{
NetCharDriver *s = chr->opaque;
if (s->fd >= 0) {
- qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
+ qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
closesocket(s->fd);
}
g_free(s);
/* connection closed */
s->connected = 0;
if (s->listen_fd >= 0) {
- qemu_set_fd_handler(s->listen_fd, tcp_chr_accept, NULL, chr);
+ qemu_set_fd_handler2(s->listen_fd, NULL, tcp_chr_accept, NULL, chr);
}
- qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
+ qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
closesocket(s->fd);
s->fd = -1;
qemu_chr_event(chr, CHR_EVENT_CLOSED);
if (s->do_nodelay)
socket_set_nodelay(fd);
s->fd = fd;
- qemu_set_fd_handler(s->listen_fd, NULL, NULL, NULL);
+ qemu_set_fd_handler2(s->listen_fd, NULL, NULL, NULL, NULL);
tcp_chr_connect(chr);
return 0;
{
TCPCharDriver *s = chr->opaque;
if (s->fd >= 0) {
- qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
+ qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
closesocket(s->fd);
}
if (s->listen_fd >= 0) {
- qemu_set_fd_handler(s->listen_fd, NULL, NULL, NULL);
+ qemu_set_fd_handler2(s->listen_fd, NULL, NULL, NULL, NULL);
closesocket(s->listen_fd);
}
g_free(s);
if (is_listen) {
s->listen_fd = fd;
- qemu_set_fd_handler(s->listen_fd, tcp_chr_accept, NULL, chr);
+ qemu_set_fd_handler2(s->listen_fd, NULL, tcp_chr_accept, NULL, chr);
if (is_telnet)
s->do_telnetopt = 1;
return qstring_from_substr((char *) d->outbuf, 0, d->outbuf_size - 1);
}
-/* NOTE: this driver can not be closed with qemu_chr_close()! */
+/* NOTE: this driver can not be closed with qemu_chr_delete()! */
void qemu_chr_close_mem(CharDriverState *chr)
{
MemoryDriver *d = chr->opaque;
#endif
};
-CharDriverState *qemu_chr_open_opts(QemuOpts *opts,
+CharDriverState *qemu_chr_new_from_opts(QemuOpts *opts,
void (*init)(struct CharDriverState *s))
{
CharDriverState *chr;
return chr;
}
-CharDriverState *qemu_chr_open(const char *label, const char *filename, void (*init)(struct CharDriverState *s))
+CharDriverState *qemu_chr_new(const char *label, const char *filename, void (*init)(struct CharDriverState *s))
{
const char *p;
CharDriverState *chr;
if (!opts)
return NULL;
- chr = qemu_chr_open_opts(opts, init);
+ chr = qemu_chr_new_from_opts(opts, init);
if (chr && qemu_opt_get_bool(opts, "mux", 0)) {
monitor_init(chr, MONITOR_USE_READLINE);
}
return chr;
}
-void qemu_chr_set_echo(struct CharDriverState *chr, bool echo)
+void qemu_chr_fe_set_echo(struct CharDriverState *chr, bool echo)
{
if (chr->chr_set_echo) {
chr->chr_set_echo(chr, echo);
}
}
-void qemu_chr_guest_close(struct CharDriverState *chr)
+void qemu_chr_fe_close(struct CharDriverState *chr)
{
if (chr->chr_guest_close) {
chr->chr_guest_close(chr);
}
}
-void qemu_chr_close(CharDriverState *chr)
+void qemu_chr_delete(CharDriverState *chr)
{
QTAILQ_REMOVE(&chardevs, chr, next);
if (chr->chr_close)
g_free(chr);
}
-static void qemu_chr_qlist_iter(QObject *obj, void *opaque)
+ChardevInfoList *qmp_query_chardev(Error **errp)
{
- QDict *chr_dict;
- Monitor *mon = opaque;
-
- chr_dict = qobject_to_qdict(obj);
- monitor_printf(mon, "%s: filename=%s\n", qdict_get_str(chr_dict, "label"),
- qdict_get_str(chr_dict, "filename"));
-}
-
-void qemu_chr_info_print(Monitor *mon, const QObject *ret_data)
-{
- qlist_iter(qobject_to_qlist(ret_data), qemu_chr_qlist_iter, mon);
-}
-
-void qemu_chr_info(Monitor *mon, QObject **ret_data)
-{
- QList *chr_list;
+ ChardevInfoList *chr_list = NULL;
CharDriverState *chr;
- chr_list = qlist_new();
-
QTAILQ_FOREACH(chr, &chardevs, next) {
- QObject *obj = qobject_from_jsonf("{ 'label': %s, 'filename': %s }",
- chr->label, chr->filename);
- qlist_append_obj(chr_list, obj);
+ ChardevInfoList *info = g_malloc0(sizeof(*info));
+ info->value = g_malloc0(sizeof(*info->value));
+ info->value->label = g_strdup(chr->label);
+ info->value->filename = g_strdup(chr->filename);
+
+ info->next = chr_list;
+ chr_list = info;
}
- *ret_data = QOBJECT(chr_list);
+ return chr_list;
}
CharDriverState *qemu_chr_find(const char *name)