diff options
author | Amit Shah <amit.shah@redhat.com> | 2010-01-20 00:36:56 +0530 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2010-01-20 08:25:23 -0600 |
commit | b60c470b8d0dc5574806b4c8bf47b0c8083eda40 (patch) | |
tree | 5114395fbff4c338fff671750d3c7fb96b271e31 /hw | |
parent | f146ec9a6dccc28b826f08f9dbb341218355d8bb (diff) | |
download | qemu-b60c470b8d0dc5574806b4c8bf47b0c8083eda40.zip qemu-b60c470b8d0dc5574806b4c8bf47b0c8083eda40.tar.gz qemu-b60c470b8d0dc5574806b4c8bf47b0c8083eda40.tar.bz2 |
virtio-serial: Add a 'virtserialport' device for generic serial port support
This commit adds a simple chardev-based serial port. Any data the guest
sends is forwarded to the chardev and vice-versa.
Sample uses for such a device can be obtaining info from the guest like
the file systems used, apps installed, etc. for offline usage and
logged-in users, clipboard copy-paste, etc. for online usage.
Signed-off-by: Amit Shah <amit.shah@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'hw')
-rw-r--r-- | hw/virtio-serial.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/hw/virtio-serial.c b/hw/virtio-serial.c index 9c2c93c..bd44ec6 100644 --- a/hw/virtio-serial.c +++ b/hw/virtio-serial.c @@ -110,3 +110,37 @@ static void virtconsole_register(void) virtio_serial_port_qdev_register(&virtconsole_info); } device_init(virtconsole_register) + +/* Generic Virtio Serial Ports */ +static int virtserialport_initfn(VirtIOSerialDevice *dev) +{ + VirtIOSerialPort *port = DO_UPCAST(VirtIOSerialPort, dev, &dev->qdev); + VirtConsole *vcon = DO_UPCAST(VirtConsole, port, port); + + port->info = dev->info; + + if (vcon->chr) { + qemu_chr_add_handlers(vcon->chr, chr_can_read, chr_read, chr_event, + vcon); + port->info->have_data = flush_buf; + } + return 0; +} + +static VirtIOSerialPortInfo virtserialport_info = { + .qdev.name = "virtserialport", + .qdev.size = sizeof(VirtConsole), + .init = virtserialport_initfn, + .exit = virtconsole_exitfn, + .qdev.props = (Property[]) { + DEFINE_PROP_CHR("chardev", VirtConsole, chr), + DEFINE_PROP_STRING("name", VirtConsole, port.name), + DEFINE_PROP_END_OF_LIST(), + }, +}; + +static void virtserialport_register(void) +{ + virtio_serial_port_qdev_register(&virtserialport_info); +} +device_init(virtserialport_register) |