Lines Matching defs:virtqueue

30  * Implements the virtqueue interface as basically described
51 #include <dev/virtio/virtqueue.h>
56 struct virtqueue {
100 * The maximum virtqueue size is 2^15. Use that value as the end of
121 static int virtqueue_init_indirect(struct virtqueue *vq, int);
122 static void virtqueue_free_indirect(struct virtqueue *vq);
123 static void virtqueue_init_indirect_list(struct virtqueue *,
126 static void vq_ring_init(struct virtqueue *);
127 static void vq_ring_update_avail(struct virtqueue *, uint16_t);
128 static uint16_t vq_ring_enqueue_segments(struct virtqueue *,
130 static bool vq_ring_use_indirect(struct virtqueue *, int);
131 static void vq_ring_enqueue_indirect(struct virtqueue *, void *,
133 static int vq_ring_enable_interrupt(struct virtqueue *, uint16_t);
134 static int vq_ring_must_notify_host(struct virtqueue *);
135 static void vq_ring_notify_host(struct virtqueue *);
136 static void vq_ring_free_chain(struct virtqueue *, uint16_t);
138 SDT_PROVIDER_DEFINE(virtqueue);
139 SDT_PROBE_DEFINE6(virtqueue, , enqueue_segments, entry, "struct virtqueue *",
141 SDT_PROBE_DEFINE1(virtqueue, , enqueue_segments, return, "uint16_t");
154 struct vq_alloc_info *info, struct virtqueue **vqp)
156 struct virtqueue *vq;
164 "virtqueue %d (%s) does not exist (size is zero)\n",
169 "virtqueue %d (%s) size is not a power of 2: %d\n",
173 device_printf(dev, "virtqueue %d (%s) requested too many "
180 vq = malloc(sizeof(struct virtqueue) +
183 device_printf(dev, "cannot allocate virtqueue\n");
213 "cannot allocate memory for virtqueue ring\n");
231 virtqueue_init_indirect(struct virtqueue *vq, int indirect_size)
246 device_printf(dev, "virtqueue %d (%s) requested "
274 virtqueue_free_indirect(struct virtqueue *vq)
295 virtqueue_init_indirect_list(struct virtqueue *vq,
308 virtqueue_reinit(struct virtqueue *vq, uint16_t size)
320 /* Warn if the virtqueue was not properly cleaned up. */
323 "%s: warning '%s' virtqueue not empty, "
350 virtqueue_free(struct virtqueue *vq)
354 device_printf(vq->vq_dev, "%s: freeing non-empty virtqueue, "
372 virtqueue_paddr(struct virtqueue *vq)
379 virtqueue_desc_paddr(struct virtqueue *vq)
386 virtqueue_avail_paddr(struct virtqueue *vq)
393 virtqueue_used_paddr(struct virtqueue *vq)
400 virtqueue_index(struct virtqueue *vq)
407 virtqueue_size(struct virtqueue *vq)
414 virtqueue_nfree(struct virtqueue *vq)
421 virtqueue_empty(struct virtqueue *vq)
428 virtqueue_full(struct virtqueue *vq)
435 virtqueue_notify(struct virtqueue *vq)
447 virtqueue_nused(struct virtqueue *vq)
460 virtqueue_intr_filter(struct virtqueue *vq)
472 virtqueue_intr(struct virtqueue *vq)
479 virtqueue_enable_intr(struct virtqueue *vq)
486 virtqueue_postpone_intr(struct virtqueue *vq, vq_postpone_t hint)
511 virtqueue_disable_intr(struct virtqueue *vq)
524 virtqueue_enqueue(struct virtqueue *vq, void *cookie, struct sglist *sg,
577 virtqueue_dequeue(struct virtqueue *vq, uint32_t *len)
604 virtqueue_poll(struct virtqueue *vq, uint32_t *len)
618 virtqueue_drain(struct virtqueue *vq, int *last)
641 virtqueue_dump(struct virtqueue *vq)
660 vq_ring_init(struct virtqueue *vq)
678 vq_ring_update_avail(struct virtqueue *vq, uint16_t desc_idx)
701 vq_ring_enqueue_segments(struct virtqueue *vq, struct vring_desc *desc,
709 SDT_PROBE6(virtqueue, , enqueue_segments, entry, vq, desc, head_idx,
731 SDT_PROBE1(virtqueue, , enqueue_segments, return, idx);
736 vq_ring_use_indirect(struct virtqueue *vq, int needed)
752 vq_ring_enqueue_indirect(struct virtqueue *vq, void *cookie,
792 vq_ring_enable_interrupt(struct virtqueue *vq, uint16_t ndesc)
821 vq_ring_must_notify_host(struct virtqueue *vq)
838 vq_ring_notify_host(struct virtqueue *vq)
846 vq_ring_free_chain(struct virtqueue *vq, uint16_t desc_idx)
875 * newly freed chain. If the virtqueue was completely used, then