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


[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