On 10/16/2012 07:54 AM, Christoffer Dall wrote: > 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 > Maybe. I didn't test serial port. Maybe Correct virtio device should be added there. This was an RFC patch series so I didn't cover all devices. -- Kind regards, Evgeny Voevodin, Technical Leader, Mobile Group, Samsung Moscow Research Center, e-mail: e.voevodin@xxxxxxxxxxx _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm