summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Levy <alevy@redhat.com>2010-08-01 18:18:36 +0300
committerAlon Levy <alevy@redhat.com>2010-08-24 17:37:15 +0300
commiteb8ac41a198f7fc3cbb1806480f53a4b2ae38c91 (patch)
tree87fc7e301649e4508630793b263b9185de98055b
parent5c5398eca257804ecd80d5661dff3bfc8d991ba1 (diff)
virtio-console: add IOCTL's for guest_{ready,open,close}
Add three IOCTL corresponding to the three control events of: guest_ready -> CHR_IOCTL_VIRT_SERIAL_READY guest_open -> CHR_IOCTL_VIRT_SERIAL_OPEN guest_close -> CHR_IOCTL_VIRT_SERIAL_CLOSE Can be used by a matching backend.
-rw-r--r--hw/virtio-console.c31
-rw-r--r--qemu-char.h4
2 files changed, 35 insertions, 0 deletions
diff --git a/hw/virtio-console.c b/hw/virtio-console.c
index caea11f3a..285e994ab 100644
--- a/hw/virtio-console.c
+++ b/hw/virtio-console.c
@@ -125,11 +125,42 @@ static int virtserialport_initfn(VirtIOSerialDevice *dev)
return 0;
}
+static void virtconsole_guest_open(VirtIOSerialPort *port)
+{
+ VirtConsole *vcon = DO_UPCAST(VirtConsole, port, port);
+
+ if (vcon->chr) {
+ qemu_chr_ioctl(vcon->chr, CHR_IOCTL_VIRT_SERIAL_OPEN, NULL);
+ }
+}
+
+static void virtconsole_guest_close(VirtIOSerialPort *port)
+{
+ VirtConsole *vcon = DO_UPCAST(VirtConsole, port, port);
+
+ if (vcon->chr) {
+ qemu_chr_ioctl(vcon->chr, CHR_IOCTL_VIRT_SERIAL_CLOSE, NULL);
+ }
+}
+
+static void virtconsole_guest_ready(VirtIOSerialPort *port)
+{
+ VirtConsole *vcon = DO_UPCAST(VirtConsole, port, port);
+
+ if (vcon->chr) {
+ qemu_chr_ioctl(vcon->chr, CHR_IOCTL_VIRT_SERIAL_READY, NULL);
+ }
+}
+
+
static VirtIOSerialPortInfo virtserialport_info = {
.qdev.name = "virtserialport",
.qdev.size = sizeof(VirtConsole),
.init = virtserialport_initfn,
.exit = virtconsole_exitfn,
+ .guest_open = virtconsole_guest_open,
+ .guest_close = virtconsole_guest_close,
+ .guest_ready = virtconsole_guest_ready,
.qdev.props = (Property[]) {
DEFINE_PROP_UINT32("nr", VirtConsole, port.id, VIRTIO_CONSOLE_BAD_ID),
DEFINE_PROP_CHR("chardev", VirtConsole, chr),
diff --git a/qemu-char.h b/qemu-char.h
index e3a07838a..1df53ae4b 100644
--- a/qemu-char.h
+++ b/qemu-char.h
@@ -41,6 +41,10 @@ typedef struct {
#define CHR_IOCTL_SERIAL_SET_TIOCM 13
#define CHR_IOCTL_SERIAL_GET_TIOCM 14
+#define CHR_IOCTL_VIRT_SERIAL_OPEN 15
+#define CHR_IOCTL_VIRT_SERIAL_CLOSE 16
+#define CHR_IOCTL_VIRT_SERIAL_READY 17
+
#define CHR_TIOCM_CTS 0x020
#define CHR_TIOCM_CAR 0x040
#define CHR_TIOCM_DSR 0x100