Lines Matching refs:vq

132 void qvirtqueue_cleanup(const QVirtioBus *bus, QVirtQueue *vq,  in qvirtqueue_cleanup()  argument
135 return bus->virtqueue_cleanup(vq, alloc); in qvirtqueue_cleanup()
168 QVirtQueue *vq, gint64 timeout_us) in qvirtio_wait_queue_isr() argument
174 if (d->bus->get_queue_isr_status(d, vq)) { in qvirtio_wait_queue_isr()
187 QVirtQueue *vq, in qvirtio_wait_status_byte_no_isr() argument
196 g_assert(!d->bus->get_queue_isr_status(d, vq)); in qvirtio_wait_status_byte_no_isr()
212 QVirtQueue *vq, in qvirtio_wait_used_elem() argument
224 if (d->bus->get_queue_isr_status(d, vq) && in qvirtio_wait_used_elem()
225 qvirtqueue_get_buf(qts, vq, &got_desc_idx, len)) { in qvirtio_wait_used_elem()
239 void qvring_init(QTestState *qts, const QGuestAllocator *alloc, QVirtQueue *vq, in qvring_init() argument
244 vq->desc = addr; in qvring_init()
245 vq->avail = vq->desc + vq->size * sizeof(struct vring_desc); in qvring_init()
246 vq->used = (uint64_t)((vq->avail + sizeof(uint16_t) * (3 + vq->size) in qvring_init()
247 + vq->align - 1) & ~(vq->align - 1)); in qvring_init()
249 for (i = 0; i < vq->size - 1; i++) { in qvring_init()
251 qvirtio_writeq(vq->vdev, qts, vq->desc + (16 * i), 0); in qvring_init()
253 qvirtio_writew(vq->vdev, qts, vq->desc + (16 * i) + 14, i + 1); in qvring_init()
257 qvirtio_writew(vq->vdev, qts, vq->avail, 0); in qvring_init()
259 qvirtio_writew(vq->vdev, qts, vq->avail + 2, 0); in qvring_init()
261 qvirtio_writew(vq->vdev, qts, vq->avail + 4 + (2 * vq->size), 0); in qvring_init()
264 qvirtio_writew(vq->vdev, qts, vq->used, 0); in qvring_init()
266 qvirtio_writew(vq->vdev, qts, vq->used + 2, 0); in qvring_init()
268 qvirtio_writew(vq->vdev, qts, vq->used + 4 + in qvring_init()
269 sizeof(struct vring_used_elem) * vq->size, 0); in qvring_init()
335 uint32_t qvirtqueue_add(QTestState *qts, QVirtQueue *vq, uint64_t data, in qvirtqueue_add() argument
339 vq->num_free--; in qvirtqueue_add()
350 qvirtio_writeq(vq->vdev, qts, vq->desc + (16 * vq->free_head), data); in qvirtqueue_add()
352 qvirtio_writel(vq->vdev, qts, vq->desc + (16 * vq->free_head) + 8, len); in qvirtqueue_add()
354 qvirtio_writew(vq->vdev, qts, vq->desc + (16 * vq->free_head) + 12, flags); in qvirtqueue_add()
356 return vq->free_head++; /* Return and increase, in this order */ in qvirtqueue_add()
359 uint32_t qvirtqueue_add_indirect(QTestState *qts, QVirtQueue *vq, in qvirtqueue_add_indirect() argument
362 g_assert(vq->indirect); in qvirtqueue_add_indirect()
363 g_assert_cmpint(vq->size, >=, indirect->elem); in qvirtqueue_add_indirect()
366 vq->num_free--; in qvirtqueue_add_indirect()
369 qvirtio_writeq(vq->vdev, qts, vq->desc + (16 * vq->free_head), in qvirtqueue_add_indirect()
372 qvirtio_writel(vq->vdev, qts, vq->desc + (16 * vq->free_head) + 8, in qvirtqueue_add_indirect()
375 qvirtio_writew(vq->vdev, qts, vq->desc + (16 * vq->free_head) + 12, in qvirtqueue_add_indirect()
378 return vq->free_head++; /* Return and increase, in this order */ in qvirtqueue_add_indirect()
381 void qvirtqueue_kick(QTestState *qts, QVirtioDevice *d, QVirtQueue *vq, in qvirtqueue_kick() argument
385 uint16_t idx = qvirtio_readw(d, qts, vq->avail + 2); in qvirtqueue_kick()
392 qvirtio_writew(d, qts, vq->avail + 4 + (2 * (idx % vq->size)), free_head); in qvirtqueue_kick()
394 qvirtio_writew(d, qts, vq->avail + 2, idx + 1); in qvirtqueue_kick()
397 flags = qvirtio_readw(d, qts, vq->used); in qvirtqueue_kick()
398 avail_event = qvirtio_readw(d, qts, vq->used + 4 + in qvirtqueue_kick()
399 sizeof(struct vring_used_elem) * vq->size); in qvirtqueue_kick()
403 (!vq->event || (uint16_t)(idx-avail_event) < 1)) { in qvirtqueue_kick()
404 d->bus->virtqueue_kick(d, vq); in qvirtqueue_kick()
418 bool qvirtqueue_get_buf(QTestState *qts, QVirtQueue *vq, uint32_t *desc_idx, in qvirtqueue_get_buf() argument
424 idx = qvirtio_readw(vq->vdev, qts, in qvirtqueue_get_buf()
425 vq->used + offsetof(struct vring_used, idx)); in qvirtqueue_get_buf()
426 if (idx == vq->last_used_idx) { in qvirtqueue_get_buf()
430 elem_addr = vq->used + in qvirtqueue_get_buf()
432 (vq->last_used_idx % vq->size) * in qvirtqueue_get_buf()
437 *desc_idx = qvirtio_readl(vq->vdev, qts, addr); in qvirtqueue_get_buf()
442 *len = qvirtio_readw(vq->vdev, qts, addr); in qvirtqueue_get_buf()
445 vq->last_used_idx++; in qvirtqueue_get_buf()
449 void qvirtqueue_set_used_event(QTestState *qts, QVirtQueue *vq, uint16_t idx) in qvirtqueue_set_used_event() argument
451 g_assert(vq->event); in qvirtqueue_set_used_event()
454 qvirtio_writew(vq->vdev, qts, vq->avail + 4 + (2 * vq->size), idx); in qvirtqueue_set_used_event()