virtio: Allocate bounce buffers for devices with VIRTIO_F_IOMMU_PLATFORM

In preparation for bouncing virtio data for devices advertising the
VIRTIO_F_IOMMU_PLATFORM feature, allocate an array of bounce buffer
structures in the vring, one per descriptor.

Signed-off-by: Will Deacon <willdeacon@google.com>
[ Paul: pick from the Android tree. Rebase to the upstream ]
Signed-off-by: Ying-Chun Liu (PaulLiu) <paul.liu@linaro.org>
Cc: Bin Meng <bmeng.cn@gmail.com>
Link: 3e052749e7
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Will Deacon
2023-03-29 22:24:59 +08:00
committed by Tom Rini
parent a15d67e01a
commit 37e53db38b
2 changed files with 24 additions and 6 deletions

View File

@@ -87,6 +87,7 @@ struct vring_used {
struct vring {
unsigned int num;
size_t size;
struct bounce_buffer *bouncebufs;
struct vring_desc *desc;
struct vring_avail *avail;
struct vring_used *used;
@@ -146,10 +147,12 @@ static inline unsigned int vring_size(unsigned int num, unsigned long align)
}
static inline void vring_init(struct vring *vr, unsigned int num, void *p,
unsigned long align)
unsigned long align,
struct bounce_buffer *bouncebufs)
{
vr->num = num;
vr->size = vring_size(num, align);
vr->bouncebufs = bouncebufs;
vr->desc = p;
vr->avail = p + num * sizeof(struct vring_desc);
vr->used = (void *)(((uintptr_t)&vr->avail->ring[num] +