virtio: Add helper functions to attach/detach vring descriptors

Move the attach and detach logic for manipulating vring descriptors
out into their own functions so that we can later extend these to
bounce the data for devices with VIRTIO_F_IOMMU_PLATFORM set.

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: f73258a4bf
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Will Deacon 2023-03-29 22:24:58 +08:00 committed by Tom Rini
parent 75582fc2e6
commit a15d67e01a

View file

@ -47,6 +47,10 @@ static unsigned int virtqueue_attach_desc(struct virtqueue *vq, unsigned int i,
return desc_shadow->next; return desc_shadow->next;
} }
static void virtqueue_detach_desc(struct virtqueue *vq, unsigned int idx)
{
}
int virtqueue_add(struct virtqueue *vq, struct virtio_sg *sgs[], int virtqueue_add(struct virtqueue *vq, struct virtio_sg *sgs[],
unsigned int out_sgs, unsigned int in_sgs) unsigned int out_sgs, unsigned int in_sgs)
{ {
@ -165,10 +169,12 @@ static void detach_buf(struct virtqueue *vq, unsigned int head)
i = head; i = head;
while (vq->vring_desc_shadow[i].flags & VRING_DESC_F_NEXT) { while (vq->vring_desc_shadow[i].flags & VRING_DESC_F_NEXT) {
virtqueue_detach_desc(vq, i);
i = vq->vring_desc_shadow[i].next; i = vq->vring_desc_shadow[i].next;
vq->num_free++; vq->num_free++;
} }
virtqueue_detach_desc(vq, i);
vq->vring_desc_shadow[i].next = vq->free_head; vq->vring_desc_shadow[i].next = vq->free_head;
vq->free_head = head; vq->free_head = head;