| 266 | |
| 267 | |
| 268 | static void |
| 269 | virtio_init_vring(struct virtqueue *vq) |
| 270 | { |
| 271 | int size = vq->vq_nentries; |
| 272 | uint8_t *ring_mem = vq->vq_ring_virt_mem; |
| 273 | |
| 274 | PMD_INIT_FUNC_TRACE(); |
| 275 | |
| 276 | memset(ring_mem, 0, vq->vq_ring_size); |
| 277 | |
| 278 | vq->vq_used_cons_idx = 0; |
| 279 | vq->vq_desc_head_idx = 0; |
| 280 | vq->vq_avail_idx = 0; |
| 281 | vq->vq_desc_tail_idx = (uint16_t)(vq->vq_nentries - 1); |
| 282 | vq->vq_free_cnt = vq->vq_nentries; |
| 283 | memset(vq->vq_descx, 0, sizeof(struct vq_desc_extra) * vq->vq_nentries); |
| 284 | if (virtio_with_packed_queue(vq->hw)) { |
| 285 | vring_init_packed(&vq->vq_packed.ring, ring_mem, |
| 286 | VIRTIO_VRING_ALIGN, size); |
| 287 | vring_desc_init_packed(vq, size); |
| 288 | } else { |
| 289 | struct vring *vr = &vq->vq_split.ring; |
| 290 | |
| 291 | vring_init_split(vr, ring_mem, VIRTIO_VRING_ALIGN, size); |
| 292 | vring_desc_init_split(vr->desc, size); |
| 293 | } |
| 294 | /* |
| 295 | * Disable device(host) interrupting guest |
| 296 | */ |
| 297 | virtqueue_disable_intr(vq); |
| 298 | } |
| 299 | |
| 300 | static int |
| 301 | virtio_alloc_queue_headers(struct virtqueue *vq, int numa_node, const char *name) |
no test coverage detected