On Mon, Oct 15, 2012 at 11:35 PM, Evgeny Voevodin <e.voevodin@xxxxxxxxxxx> wrote: > On 10/16/2012 12:28 AM, Christoffer Dall wrote: >> >> On Tue, Oct 9, 2012 at 5:24 AM, <fred.konrad@xxxxxxxxxxxxx> wrote: >>> >>> From: Evgeny Voevodin <e.voevodin@xxxxxxxxxxx> >>> >>> Signed-off-by: Evgeny Voevodin <e.voevodin@xxxxxxxxxxx> >>> --- >>> hw/virtio-serial-bus.c | 44 >>> ++++++++++++++++++++++++++++++++++++++++++++ >>> hw/virtio-serial.h | 11 +++++++++++ >>> 2 files changed, 55 insertions(+) >>> >>> diff --git a/hw/virtio-serial-bus.c b/hw/virtio-serial-bus.c >>> index 82073f5..699a485 100644 >>> --- a/hw/virtio-serial-bus.c >>> +++ b/hw/virtio-serial-bus.c >>> @@ -24,6 +24,7 @@ >>> #include "sysbus.h" >>> #include "trace.h" >>> #include "virtio-serial.h" >>> +#include "virtio-transport.h" >>> >>> /* The virtio-serial bus on top of which the ports will ride as devices >>> */ >>> struct VirtIOSerialBus { >>> @@ -1014,3 +1015,46 @@ static void virtio_serial_register_types(void) >>> } >>> >>> type_init(virtio_serial_register_types) >>> + >>> +/******************** VirtIOSer Device **********************/ >>> + >>> +static int virtio_serialdev_init(DeviceState *dev) >>> +{ >>> + VirtIODevice *vdev; >>> + VirtIOSerState *s = VIRTIO_SERIAL_FROM_QDEV(dev); >>> + vdev = virtio_serial_init(dev, &s->serial); >>> + if (!vdev) { >>> + return -1; >>> + } >>> + >>> + assert(s->trl != NULL); >>> + >>> + return virtio_call_backend_init_cb(dev, s->trl, vdev); >>> +} >>> + >>> +static Property virtio_serial_properties[] = { >>> + DEFINE_PROP_UINT32("max_ports", VirtIOSerState, >>> + serial.max_virtserial_ports, 31), >>> + DEFINE_PROP_END_OF_LIST(), >>> +}; >>> + >>> +static void virtio_serial_class_init(ObjectClass *klass, void *data) >>> +{ >>> + DeviceClass *dc = DEVICE_CLASS(klass); >>> + dc->init = virtio_serialdev_init; >>> + dc->props = virtio_serial_properties; >>> +} >>> + >>> +static TypeInfo virtio_serial_info = { >>> + .name = "virtio-serial", >>> + .parent = TYPE_DEVICE, >>> + .instance_size = sizeof(VirtIOSerState), >>> + .class_init = virtio_serial_class_init, >>> +}; >>> + >>> +static void virtio_ser_register_types(void) >>> +{ >>> + type_register_static(&virtio_serial_info); >>> +} >>> + >>> +type_init(virtio_ser_register_types) >>> diff --git a/hw/virtio-serial.h b/hw/virtio-serial.h >>> index 16e3982..c6b916a 100644 >>> --- a/hw/virtio-serial.h >>> +++ b/hw/virtio-serial.h >>> @@ -15,8 +15,10 @@ >>> #ifndef _QEMU_VIRTIO_SERIAL_H >>> #define _QEMU_VIRTIO_SERIAL_H >>> >>> +#include "sysbus.h" >>> #include "qdev.h" >>> #include "virtio.h" >>> +#include "virtio-transport.h" >>> >>> /* == Interface shared between the guest kernel and qemu == */ >>> >>> @@ -173,6 +175,15 @@ struct VirtIOSerialPort { >>> bool throttled; >>> }; >>> >>> +typedef struct { >>> + DeviceState qdev; >>> + /* virtio-serial */ >>> + virtio_serial_conf serial; >>> + VirtIOTransportLink *trl; >>> +} VirtIOSerState; >>> + >>> +#define VIRTIO_SERIAL_FROM_QDEV(dev) DO_UPCAST(VirtIOSerState, qdev, >>> dev) >>> + >>> /* Interface to the virtio-serial bus */ >>> >>> /* >> >> Hi Fred, >> >> Did you ever actually test this? >> >> With -device virtio-serial I hit the assert on s->trl != NULL >> >> Perhaps I am doing something wrong? >> >> >> -Christoffer >> > > The parameters should be like: > -drive file=./abc.img,id=virtio-blk,if=none \ > -device virtio-blk,drive=virtio-blk,transport=virtio-mmio.0 \ > -netdev user,id=virtio-net \ > -device virtio-net,netdev=virtio-net,transport=virtio-mmio.1 \ > right, but it seems there's some missing binding of the transport layer for the pci-new protocol thingy for the virtio serial port bus console or am I missing something? these options for disk and network work perfectly! Thanks, -Christoffer _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm