[SLOF] [PATCH v1 06/27] virtio: add virtio 1.0 related struct and defines

Nikunj A Dadhania nikunj at linux.vnet.ibm.com
Mon Jan 18 15:20:05 AEDT 2016


Alexey Kardashevskiy <aik at ozlabs.ru> writes:

> On 01/14/2016 09:33 PM, Nikunj A Dadhania wrote:
>> Alexey Kardashevskiy <aik at ozlabs.ru> writes:
>>
>>> On 01/13/2016 10:16 PM, Nikunj A Dadhania wrote:
>>>> Signed-off-by: Nikunj A Dadhania <nikunj at linux.vnet.ibm.com>
>>>> ---
>>>>    board-qemu/slof/virtio.fs | 14 ++++++++++++++
>>>>    lib/libvirtio/virtio.h    | 33 ++++++++++++++++++++++++++++++---
>>>>    2 files changed, 44 insertions(+), 3 deletions(-)
>>>>
>>>> diff --git a/board-qemu/slof/virtio.fs b/board-qemu/slof/virtio.fs
>>>> index 818c132..29d0a19 100644
>>>> --- a/board-qemu/slof/virtio.fs
>>>> +++ b/board-qemu/slof/virtio.fs
>>>> @@ -14,8 +14,22 @@
>>>>    STRUCT
>>>>       /n FIELD vd>base
>>>>       /l FIELD vd>type
>>>> +   /l FIELD vd>is-modern
>>>> +   16 FIELD vd>legacy
>>>
>>> Why not /w?
>>
>> 16 bytes field
>
>
> oh right. But Thomas is right, it is 10 :)
>
> Could not it be as well this?
>
> /vd-cap-len FIELD vd>legacy

Will try this out.

>
>
>
>>
>>>
>>>
>>>> +   16 FIELD vd>common
>>>> +   16 FIELD vd>notify
>>>> +   16 FIELD vd>isr
>>>> +   16 FIELD vd>device
>>>> +   16 FIELD vd>pci
>>>>    CONSTANT /vd-len
>>>>
>>>> +STRUCT
>>>> +   /n FIELD vd>cap>address
>>>> +   /c FIELD vd>cap>bar
>>>> +   /c FIELD vd>cap>is_io
>>>> +   /c FIELD vd>cap>cap_id
>>>> +   5  FIELD vd>cap>pad
>>>> +CONSTANT /vd-cap-len
>>>>
>>>>    \ Initialize virtiodev structure for the current node
>>>>    : virtio-setup-vd  ( vdstruct -- )
>>>> diff --git a/lib/libvirtio/virtio.h b/lib/libvirtio/virtio.h
>>>> index 8d3f376..56e044b 100644
>>>> --- a/lib/libvirtio/virtio.h
>>>> +++ b/lib/libvirtio/virtio.h
>>>> @@ -19,8 +19,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)
>>>
>>> Put x in braces.
>>
>> Sure
>>
>>>
>>>
>>>> +
>>>> +/* 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 */
>>>> @@ -34,7 +43,7 @@ struct vring_desc {
>>>>    	uint32_t len;		/* Length */
>>>>    	uint16_t flags;		/* The flags as indicated above */
>>>>    	uint16_t next;		/* Next field if flags & NEXT */
>>>> -};
>>>> +};
>>>
>>> Unrelated whitespace change?
>>
>> As I was at this file I changed, I can submit as a separate patch if
>> needed.
>>
>>>
>>>>
>>>>    /* Definitions for vring_avail.flags */
>>>>    #define VRING_AVAIL_F_NO_INTERRUPT	1
>>>> @@ -44,7 +53,7 @@ struct vring_avail {
>>>>    	uint16_t flags;
>>>>    	uint16_t idx;
>>>>    	uint16_t ring[];
>>>> -};
>>>> +};
>>>
>>>
>>> Unrelated whitespace change?
>>
>> ditto
>>
>>>
>>>
>>>>
>>>>
>>>>    /* Definitions for vring_used.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 {
>>>> +	uint64_t 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 */
>>>
>>> Why "int", not uintxx_t?
>>
>> legacy, i can change, but will be unrelated.
>
>
> Ignore my comment, this was not a change from this patch.
>
>
>>
>>>
>>> In general, if it is a binary interface, it is better to use uintxx_t.
>>> Unless it is widely assumed in SLOF what long==/l, short==/w, void*==/n, etc...
>>>
>>>
>>>
>>>> -};
>>>> +	int is_modern;     /* Indicates whether to use virtio 1.0 */
>>>> +	struct virtio_cap legacy;
>>>> +	struct virtio_cap common;
>>>> +	struct virtio_cap notify;
>>>> +	struct virtio_cap isr;
>>>> +	struct virtio_cap device;
>>>> +	struct virtio_cap pci;
>>>> +	uint32_t notify_off_mul;
>>>> +}__attribute__ ((packed));
>>>
>>>
>>> Why do you need "packed" now? I assume you are going to use it from SLOF
>>> but why? :)
>>
>> Initially, when I was writing this, I thought of keeping this option
>> open. As I was not sure whether i can completely do this in C. Currently,
>> with the below structure, I can access everything in slof as well if needed.
>
>
> But you do not? Put a note in the commit log that this is for the future 
> use. Or (better) drop it if you are not really planning on accessing it 
> from SLOF.

I will make a note in the commit log.


>
>
>>
>>    STRUCT
>>       /n FIELD vd>base
>>       /l FIELD vd>type
>>       /l FIELD vd>is-modern
>>       16 FIELD vd>legacy
>>       16 FIELD vd>common
>>       16 FIELD vd>notify
>>       16 FIELD vd>isr
>>       16 FIELD vd>device
>>       16 FIELD vd>pci
>>    CONSTANT /vd-len
>>
>> Regards
>> Nikunj
>>
>
>
> -- 
> Alexey



More information about the SLOF mailing list