Lines Matching refs:vq

146 void qvirtqueue_cleanup(const QVirtioBus *bus, QVirtQueue *vq,  in qvirtqueue_cleanup()  argument
149 return bus->virtqueue_cleanup(vq, alloc); in qvirtqueue_cleanup()
182 QVirtQueue *vq, gint64 timeout_us) in qvirtio_wait_queue_isr() argument
187 if (d->bus->get_queue_isr_status(d, vq)) { in qvirtio_wait_queue_isr()
200 QVirtQueue *vq, in qvirtio_wait_status_byte_no_isr() argument
208 g_assert(!d->bus->get_queue_isr_status(d, vq)); in qvirtio_wait_status_byte_no_isr()
224 QVirtQueue *vq, in qvirtio_wait_used_elem() argument
235 if (d->bus->get_queue_isr_status(d, vq) && in qvirtio_wait_used_elem()
236 qvirtqueue_get_buf(qts, vq, &got_desc_idx, len)) { in qvirtio_wait_used_elem()
249 void qvring_init(QTestState *qts, const QGuestAllocator *alloc, QVirtQueue *vq, in qvring_init() argument
254 vq->desc = addr; in qvring_init()
255 vq->avail = vq->desc + vq->size * sizeof(struct vring_desc); in qvring_init()
256 vq->used = (uint64_t)((vq->avail + sizeof(uint16_t) * (3 + vq->size) in qvring_init()
257 + vq->align - 1) & ~(vq->align - 1)); in qvring_init()
259 for (i = 0; i < vq->size - 1; i++) { in qvring_init()
261 qvirtio_writeq(vq->vdev, qts, vq->desc + (16 * i), 0); in qvring_init()
263 qvirtio_writew(vq->vdev, qts, vq->desc + (16 * i) + 14, i + 1); in qvring_init()
267 qvirtio_writew(vq->vdev, qts, vq->avail, 0); in qvring_init()
269 qvirtio_writew(vq->vdev, qts, vq->avail + 2, 0); in qvring_init()
271 qvirtio_writew(vq->vdev, qts, vq->avail + 4 + (2 * vq->size), 0); in qvring_init()
274 qvirtio_writew(vq->vdev, qts, vq->used, 0); in qvring_init()
276 qvirtio_writew(vq->vdev, qts, vq->used + 2, 0); in qvring_init()
278 qvirtio_writew(vq->vdev, qts, vq->used + 4 + in qvring_init()
279 sizeof(struct vring_used_elem) * vq->size, 0); in qvring_init()
345 uint32_t qvirtqueue_add(QTestState *qts, QVirtQueue *vq, uint64_t data, in qvirtqueue_add() argument
349 vq->num_free--; in qvirtqueue_add()
360 qvirtio_writeq(vq->vdev, qts, vq->desc + (16 * vq->free_head), data); in qvirtqueue_add()
362 qvirtio_writel(vq->vdev, qts, vq->desc + (16 * vq->free_head) + 8, len); in qvirtqueue_add()
364 qvirtio_writew(vq->vdev, qts, vq->desc + (16 * vq->free_head) + 12, flags); in qvirtqueue_add()
366 return vq->free_head++; /* Return and increase, in this order */ in qvirtqueue_add()
369 uint32_t qvirtqueue_add_indirect(QTestState *qts, QVirtQueue *vq, in qvirtqueue_add_indirect() argument
372 g_assert(vq->indirect); in qvirtqueue_add_indirect()
373 g_assert_cmpint(vq->size, >=, indirect->elem); in qvirtqueue_add_indirect()
376 vq->num_free--; in qvirtqueue_add_indirect()
379 qvirtio_writeq(vq->vdev, qts, vq->desc + (16 * vq->free_head), in qvirtqueue_add_indirect()
382 qvirtio_writel(vq->vdev, qts, vq->desc + (16 * vq->free_head) + 8, in qvirtqueue_add_indirect()
385 qvirtio_writew(vq->vdev, qts, vq->desc + (16 * vq->free_head) + 12, in qvirtqueue_add_indirect()
388 return vq->free_head++; /* Return and increase, in this order */ in qvirtqueue_add_indirect()
391 void qvirtqueue_kick(QTestState *qts, QVirtioDevice *d, QVirtQueue *vq, in qvirtqueue_kick() argument
395 uint16_t idx = qvirtio_readw(d, qts, vq->avail + 2); in qvirtqueue_kick()
402 qvirtio_writew(d, qts, vq->avail + 4 + (2 * (idx % vq->size)), free_head); in qvirtqueue_kick()
404 qvirtio_writew(d, qts, vq->avail + 2, idx + 1); in qvirtqueue_kick()
407 flags = qvirtio_readw(d, qts, vq->used); in qvirtqueue_kick()
408 avail_event = qvirtio_readw(d, qts, vq->used + 4 + in qvirtqueue_kick()
409 sizeof(struct vring_used_elem) * vq->size); in qvirtqueue_kick()
413 (!vq->event || (uint16_t)(idx-avail_event) < 1)) { in qvirtqueue_kick()
414 d->bus->virtqueue_kick(d, vq); in qvirtqueue_kick()
428 bool qvirtqueue_get_buf(QTestState *qts, QVirtQueue *vq, uint32_t *desc_idx, in qvirtqueue_get_buf() argument
434 idx = qvirtio_readw(vq->vdev, qts, in qvirtqueue_get_buf()
435 vq->used + offsetof(struct vring_used, idx)); in qvirtqueue_get_buf()
436 if (idx == vq->last_used_idx) { in qvirtqueue_get_buf()
440 elem_addr = vq->used + in qvirtqueue_get_buf()
442 (vq->last_used_idx % vq->size) * in qvirtqueue_get_buf()
447 *desc_idx = qvirtio_readl(vq->vdev, qts, addr); in qvirtqueue_get_buf()
452 *len = qvirtio_readw(vq->vdev, qts, addr); in qvirtqueue_get_buf()
455 vq->last_used_idx++; in qvirtqueue_get_buf()
459 void qvirtqueue_set_used_event(QTestState *qts, QVirtQueue *vq, uint16_t idx) in qvirtqueue_set_used_event() argument
461 g_assert(vq->event); in qvirtqueue_set_used_event()
464 qvirtio_writew(vq->vdev, qts, vq->avail + 4 + (2 * vq->size), idx); in qvirtqueue_set_used_event()