On 16/10/2012 06:14, Evgeny Voevodin wrote: > 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. > Hi, I tried it yesterday, and it lacks the transport property, I will add it today. Fred. _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm