[SLOF] [PATCH v1 06/27] virtio: add virtio 1.0 related struct and defines
Nikunj A Dadhania
nikunj at linux.vnet.ibm.com
Thu Jan 14 21:33:18 AEDT 2016
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
>
>
>> + 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.
>
> 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.
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
More information about the SLOF
mailing list