[SLOF] [PATCH v3 13/22] virtio: add virtio 1.0 related struct and defines
Nikunj A Dadhania
nikunj at linux.vnet.ibm.com
Wed Jan 27 20:05:25 AEDT 2016
Thomas Huth <thuth at redhat.com> writes:
> On 22.01.2016 11:54, Nikunj A Dadhania wrote:
>> Traditionally, struct virtio_device is shared between SLOF and C code.
>> This still remains shared with the addition of virtio_cap structure as
>> well. Now both virtio_device and virtio_cap structures are shared.
>>
>> Signed-off-by: Nikunj A Dadhania <nikunj at linux.vnet.ibm.com>
>> ---
>> board-qemu/slof/virtio.fs | 17 +++++++++++++++++
>> include/byteorder.h | 4 ++++
>> lib/libvirtio/virtio.c | 19 +++++++++++++++++++
>> lib/libvirtio/virtio.h | 29 ++++++++++++++++++++++++++++-
>> 4 files changed, 68 insertions(+), 1 deletion(-)
> ...
>> diff --git a/lib/libvirtio/virtio.h b/lib/libvirtio/virtio.h
>> index c26282f..8c9daab 100644
>> --- a/lib/libvirtio/virtio.h
>> +++ b/lib/libvirtio/virtio.h
>> @@ -20,8 +20,17 @@
>> #define VIRTIO_STAT_ACKNOWLEDGE 1
>> #define VIRTIO_STAT_DRIVER 2
>> #define VIRTIO_STAT_DRIVER_OK 4
>> +#define VIRTIO_STAT_FEATURES_OK 8
>> +#define VIRTIO_STAT_NEEDS_RESET 64
>> #define VIRTIO_STAT_FAILED 128
>>
>> +#define BIT(x) (1UL << (x))
>> +
>> +/* VIRTIO 1.0 Device independent feature bits */
>> +#define VIRTIO_F_RING_INDIRECT_DESC BIT(28)
>> +#define VIRTIO_F_RING_EVENT_IDX BIT(29)
>> +#define VIRTIO_F_VERSION_1 BIT(32)
>> +
>> #define VIRTIO_TIMEOUT 5000 /* 5 sec timeout */
>>
>> /* Definitions for vring_desc.flags */
>> @@ -62,10 +71,28 @@ struct vring_used {
>> };
>>
>> #define VIRTIO_TYPE_PCI 0 /* For virtio-pci interface */
>> +
>> +/* Structure shared with SLOF and is 16bytes */
>> +struct virtio_cap {
>> + void *addr;
>> + uint8_t bar;
>> + uint8_t is_io;
>> + uint8_t cap_id;
>> + uint8_t pad[5];
>> +} __attribute__ ((packed));
>> +
>> struct virtio_device {
>> void *base; /* base address */
>> int type; /* VIRTIO_TYPE_PCI or VIRTIO_TYPE_VIO */
>> -};
>> + uint32_t is_modern; /* Indicates whether to use virtio 1.0 */
>
> I was just thinking about the "int type" field again which is pretty
> much unused nowadays, since VIRTIO_TYPE_VIO is not supported anymore...
>
> Maybe you could also simply use the "type" field instead of introducing
> a "is_modern" flag ... then you'd simply have VIRTIO_TYPE_PCI_LEGACY
> and VIRTIO_TYPE_PCI_MODERN there instead?
> OTOH, if that's too cumbersome, you could also finally add a patch that
> removes the type field completely from the code - but maintaining both
> fields, "type" and "is_modern", does not make much sense in the long
> run, I think.
Let me introduce a patch removing the type field completely. This will
prevent unnecessary checking in the virtio functions.
Regards
Nikunj
More information about the SLOF
mailing list