diff --git a/hw/virtio-console.c b/hw/virtio-console.c index caea11f3a8..d7fe68b298 100644 --- a/hw/virtio-console.c +++ b/hw/virtio-console.c @@ -58,22 +58,26 @@ static void chr_event(void *opaque, int event) } } +static int generic_port_init(VirtConsole *vcon, VirtIOSerialDevice *dev) +{ + vcon->port.info = dev->info; + + if (vcon->chr) { + qemu_chr_add_handlers(vcon->chr, chr_can_read, chr_read, chr_event, + vcon); + vcon->port.info->have_data = flush_buf; + } + return 0; +} + /* Virtio Console Ports */ static int virtconsole_initfn(VirtIOSerialDevice *dev) { VirtIOSerialPort *port = DO_UPCAST(VirtIOSerialPort, dev, &dev->qdev); VirtConsole *vcon = DO_UPCAST(VirtConsole, port, port); - port->info = dev->info; - port->is_console = true; - - 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; + return generic_port_init(vcon, dev); } static int virtconsole_exitfn(VirtIOSerialDevice *dev) @@ -115,14 +119,7 @@ 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; + return generic_port_init(vcon, dev); } static VirtIOSerialPortInfo virtserialport_info = {