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


[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