MCPcopy Create free account
hub / github.com/F-Stack/f-stack / modern_setup_queue

Function modern_setup_queue

dpdk/drivers/net/virtio/virtio_pci.c:422–458  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

420}
421
422static int
423modern_setup_queue(struct virtio_hw *hw, struct virtqueue *vq)
424{
425 struct virtio_pci_dev *dev = virtio_pci_get_dev(hw);
426 uint64_t desc_addr, avail_addr, used_addr;
427 uint16_t notify_off;
428
429 desc_addr = vq->vq_ring_mem;
430 avail_addr = desc_addr + vq->vq_nentries * sizeof(struct vring_desc);
431 used_addr = RTE_ALIGN_CEIL(avail_addr + offsetof(struct vring_avail,
432 ring[vq->vq_nentries]),
433 VIRTIO_VRING_ALIGN);
434
435 rte_write16(vq->vq_queue_index, &dev->common_cfg->queue_select);
436
437 io_write64_twopart(desc_addr, &dev->common_cfg->queue_desc_lo,
438 &dev->common_cfg->queue_desc_hi);
439 io_write64_twopart(avail_addr, &dev->common_cfg->queue_avail_lo,
440 &dev->common_cfg->queue_avail_hi);
441 io_write64_twopart(used_addr, &dev->common_cfg->queue_used_lo,
442 &dev->common_cfg->queue_used_hi);
443
444 notify_off = rte_read16(&dev->common_cfg->queue_notify_off);
445 vq->notify_addr = (void *)((uint8_t *)dev->notify_base +
446 notify_off * dev->notify_off_multiplier);
447
448 rte_write16(1, &dev->common_cfg->queue_enable);
449
450 PMD_INIT_LOG(DEBUG, "queue %u addresses:", vq->vq_queue_index);
451 PMD_INIT_LOG(DEBUG, "\t desc_addr: %" PRIx64, desc_addr);
452 PMD_INIT_LOG(DEBUG, "\t aval_addr: %" PRIx64, avail_addr);
453 PMD_INIT_LOG(DEBUG, "\t used_addr: %" PRIx64, used_addr);
454 PMD_INIT_LOG(DEBUG, "\t notify addr: %p (notify offset: %u)",
455 vq->notify_addr, notify_off);
456
457 return 0;
458}
459
460static void
461modern_del_queue(struct virtio_hw *hw, struct virtqueue *vq)

Callers

nothing calls this directly

Calls 3

io_write64_twopartFunction · 0.70
rte_write16Function · 0.50
rte_read16Function · 0.50

Tested by

no test coverage detected