virtio: add packed ring types and macros
Add types and macros for packed ring. Signed-off-by: Tiwei Bie <tiwei.bie@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
4afe60a97b
commit
89a9157e12
@@ -75,6 +75,9 @@
|
|||||||
*/
|
*/
|
||||||
#define VIRTIO_F_IOMMU_PLATFORM 33
|
#define VIRTIO_F_IOMMU_PLATFORM 33
|
||||||
|
|
||||||
|
/* This feature indicates support for the packed virtqueue layout. */
|
||||||
|
#define VIRTIO_F_RING_PACKED 34
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Does the device support Single Root I/O Virtualization?
|
* Does the device support Single Root I/O Virtualization?
|
||||||
*/
|
*/
|
||||||
|
@@ -44,6 +44,13 @@
|
|||||||
/* This means the buffer contains a list of buffer descriptors. */
|
/* This means the buffer contains a list of buffer descriptors. */
|
||||||
#define VRING_DESC_F_INDIRECT 4
|
#define VRING_DESC_F_INDIRECT 4
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Mark a descriptor as available or used in packed ring.
|
||||||
|
* Notice: they are defined as shifts instead of shifted values.
|
||||||
|
*/
|
||||||
|
#define VRING_PACKED_DESC_F_AVAIL 7
|
||||||
|
#define VRING_PACKED_DESC_F_USED 15
|
||||||
|
|
||||||
/* The Host uses this in used->flags to advise the Guest: don't kick me when
|
/* The Host uses this in used->flags to advise the Guest: don't kick me when
|
||||||
* you add a buffer. It's unreliable, so it's simply an optimization. Guest
|
* you add a buffer. It's unreliable, so it's simply an optimization. Guest
|
||||||
* will still kick if it's out of buffers. */
|
* will still kick if it's out of buffers. */
|
||||||
@@ -53,6 +60,23 @@
|
|||||||
* optimization. */
|
* optimization. */
|
||||||
#define VRING_AVAIL_F_NO_INTERRUPT 1
|
#define VRING_AVAIL_F_NO_INTERRUPT 1
|
||||||
|
|
||||||
|
/* Enable events in packed ring. */
|
||||||
|
#define VRING_PACKED_EVENT_FLAG_ENABLE 0x0
|
||||||
|
/* Disable events in packed ring. */
|
||||||
|
#define VRING_PACKED_EVENT_FLAG_DISABLE 0x1
|
||||||
|
/*
|
||||||
|
* Enable events for a specific descriptor in packed ring.
|
||||||
|
* (as specified by Descriptor Ring Change Event Offset/Wrap Counter).
|
||||||
|
* Only valid if VIRTIO_RING_F_EVENT_IDX has been negotiated.
|
||||||
|
*/
|
||||||
|
#define VRING_PACKED_EVENT_FLAG_DESC 0x2
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Wrap counter bit shift in event suppression structure
|
||||||
|
* of packed ring.
|
||||||
|
*/
|
||||||
|
#define VRING_PACKED_EVENT_F_WRAP_CTR 15
|
||||||
|
|
||||||
/* We support indirect buffer descriptors */
|
/* We support indirect buffer descriptors */
|
||||||
#define VIRTIO_RING_F_INDIRECT_DESC 28
|
#define VIRTIO_RING_F_INDIRECT_DESC 28
|
||||||
|
|
||||||
@@ -171,4 +195,32 @@ static inline int vring_need_event(__u16 event_idx, __u16 new_idx, __u16 old)
|
|||||||
return (__u16)(new_idx - event_idx - 1) < (__u16)(new_idx - old);
|
return (__u16)(new_idx - event_idx - 1) < (__u16)(new_idx - old);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct vring_packed_desc_event {
|
||||||
|
/* Descriptor Ring Change Event Offset/Wrap Counter. */
|
||||||
|
__le16 off_wrap;
|
||||||
|
/* Descriptor Ring Change Event Flags. */
|
||||||
|
__le16 flags;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct vring_packed_desc {
|
||||||
|
/* Buffer Address. */
|
||||||
|
__le64 addr;
|
||||||
|
/* Buffer Length. */
|
||||||
|
__le32 len;
|
||||||
|
/* Buffer ID. */
|
||||||
|
__le16 id;
|
||||||
|
/* The flags depending on descriptor type. */
|
||||||
|
__le16 flags;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct vring_packed {
|
||||||
|
unsigned int num;
|
||||||
|
|
||||||
|
struct vring_packed_desc *desc;
|
||||||
|
|
||||||
|
struct vring_packed_desc_event *driver;
|
||||||
|
|
||||||
|
struct vring_packed_desc_event *device;
|
||||||
|
};
|
||||||
|
|
||||||
#endif /* _UAPI_LINUX_VIRTIO_RING_H */
|
#endif /* _UAPI_LINUX_VIRTIO_RING_H */
|
||||||
|
Reference in New Issue
Block a user