Re: [RFC PATCH 07/13] hw/virtio-serial-bus.c: Add virtio-serial device.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 \

-- 
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


[Index of Archives]     [Linux KVM]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux