Lines Matching +full:- +full:- +full:-
11 #include "virtio-mmio.h"
16 vr->num = num; in vring_init()
17 vr->desc = p; in vring_init()
18 vr->avail = p + num*sizeof(struct vring_desc); in vring_init()
19 vr->used = (void *)(((unsigned long)&vr->avail->ring[num] + sizeof(u16) in vring_init()
20 + align-1) & ~(align - 1)); in vring_init()
32 vring_init(&vq->vring, num, pages, vring_align); in vring_init_virtqueue()
33 vq->vq.callback = callback; in vring_init_virtqueue()
34 vq->vq.vdev = vdev; in vring_init_virtqueue()
35 vq->vq.name = name; in vring_init_virtqueue()
36 vq->vq.num_free = num; in vring_init_virtqueue()
37 vq->vq.index = index; in vring_init_virtqueue()
38 vq->notify = notify; in vring_init_virtqueue()
39 vq->last_used_idx = 0; in vring_init_virtqueue()
40 vq->num_added = 0; in vring_init_virtqueue()
41 vq->free_head = 0; in vring_init_virtqueue()
43 for (i = 0; i < num-1; i++) { in vring_init_virtqueue()
44 vq->vring.desc[i].next = i+1; in vring_init_virtqueue()
45 vq->data[i] = NULL; in vring_init_virtqueue()
47 vq->data[i] = NULL; in vring_init_virtqueue()
59 if (!vq->vq.num_free) in virtqueue_add_outbuf()
60 return -1; in virtqueue_add_outbuf()
62 --vq->vq.num_free; in virtqueue_add_outbuf()
64 head = vq->free_head; in virtqueue_add_outbuf()
66 vq->vring.desc[head].flags = 0; in virtqueue_add_outbuf()
67 vq->vring.desc[head].addr = virt_to_phys(buf); in virtqueue_add_outbuf()
68 vq->vring.desc[head].len = len; in virtqueue_add_outbuf()
70 vq->free_head = vq->vring.desc[head].next; in virtqueue_add_outbuf()
72 vq->data[head] = buf; in virtqueue_add_outbuf()
74 avail = (vq->vring.avail->idx & (vq->vring.num-1)); in virtqueue_add_outbuf()
75 vq->vring.avail->ring[avail] = head; in virtqueue_add_outbuf()
77 vq->vring.avail->idx++; in virtqueue_add_outbuf()
78 vq->num_added++; in virtqueue_add_outbuf()
87 return vq->notify(_vq); in virtqueue_kick()
94 vq->data[head] = NULL; in detach_buf()
96 while (vq->vring.desc[i].flags & VRING_DESC_F_NEXT) { in detach_buf()
97 i = vq->vring.desc[i].next; in detach_buf()
98 vq->vq.num_free++; in detach_buf()
101 vq->vring.desc[i].next = vq->free_head; in detach_buf()
102 vq->free_head = head; in detach_buf()
103 vq->vq.num_free++; in detach_buf()
115 last_used = (vq->last_used_idx & (vq->vring.num-1)); in virtqueue_get_buf()
116 i = vq->vring.used->ring[last_used].id; in virtqueue_get_buf()
117 *len = vq->vring.used->ring[last_used].len; in virtqueue_get_buf()
119 ret = vq->data[i]; in virtqueue_get_buf()
122 vq->last_used_idx++; in virtqueue_get_buf()