Lines Matching defs:msix

28 #include "hw/pci/msix.h"
446 set_bit(nr, vdev->msix->pending);
496 static int vfio_enable_vectors(VFIOPCIDevice *vdev, bool msix)
511 if (msix && !vdev->msix->noresize) {
524 irq_set->index = msix ? VFIO_PCI_MSIX_IRQ_INDEX : VFIO_PCI_MSI_IRQ_INDEX;
540 (msix && msix_is_masked(&vdev->pdev, i))) {
558 int vector_n, bool msix)
560 if ((msix && vdev->no_kvm_msix) || (!msix && vdev->no_kvm_msi)) {
707 if (vdev->msix->noresize && resizing) {
720 clear_bit(nr, vdev->msix->pending);
721 if (find_first_bit(vdev->msix->pending,
805 vdev->msi_vectors = g_new0(VFIOMSIVector, vdev->msix->entries);
979 memset(vdev->msix->pending, 0,
980 BITS_TO_LONGS(vdev->msix->entries) * sizeof(unsigned long));
1542 VFIORegion *region = &vdev->bars[vdev->msix->table_bar].region;
1563 start = vdev->msix->table_offset & qemu_real_host_page_mask();
1564 end = REAL_HOST_PAGE_ALIGN((uint64_t)vdev->msix->table_offset +
1565 (vdev->msix->entries * PCI_MSIX_ENTRY_SIZE));
1580 vdev->msix->table_bar, 0, 0);
1585 vdev->msix->table_bar, region->mmaps[0].offset,
1593 vdev->msix->table_bar, region->mmaps[0].offset,
1605 vdev->msix->table_bar, region->mmaps[0].offset,
1611 vdev->msix->table_bar, region->mmaps[1].offset,
1621 if (!vdev->msix || vdev->msix_relo == OFF_AUTO_PCIBAR_OFF) {
1626 msix_sz = (vdev->msix->entries * PCI_MSIX_ENTRY_SIZE) +
1627 (QEMU_ALIGN_UP(vdev->msix->entries, 64) / 8);
1687 vdev->msix->table_offset = 0;
1695 vdev->msix->table_offset = vdev->bars[target_bar].size / 2;
1698 vdev->msix->table_bar = target_bar;
1699 vdev->msix->pba_bar = target_bar;
1701 vdev->msix->pba_offset = vdev->msix->table_offset +
1702 (vdev->msix->entries * PCI_MSIX_ENTRY_SIZE);
1705 vdev->msix->table_bar, vdev->msix->table_offset);
1723 VFIOMSIXInfo *msix;
1758 msix = g_malloc0(sizeof(*msix));
1759 msix->table_bar = table & PCI_MSIX_FLAGS_BIRMASK;
1760 msix->table_offset = table & ~PCI_MSIX_FLAGS_BIRMASK;
1761 msix->pba_bar = pba & PCI_MSIX_FLAGS_BIRMASK;
1762 msix->pba_offset = pba & ~PCI_MSIX_FLAGS_BIRMASK;
1763 msix->entries = (ctrl & PCI_MSIX_FLAGS_QSIZE) + 1;
1769 g_free(msix);
1773 msix->noresize = !!(irq_info.flags & VFIO_IRQ_INFO_NORESIZE);
1780 if (msix->pba_offset >= vdev->bars[msix->pba_bar].region.size) {
1789 msix->pba_offset = 0x1000;
1797 msix->pba_offset = 0xb400;
1801 g_free(msix);
1806 trace_vfio_msix_early_setup(vdev->vbasedev.name, pos, msix->table_bar,
1807 msix->table_offset, msix->entries,
1808 msix->noresize);
1809 vdev->msix = msix;
1821 vdev->msix->pending = g_new0(unsigned long,
1822 BITS_TO_LONGS(vdev->msix->entries));
1823 ret = msix_init(&vdev->pdev, vdev->msix->entries,
1824 vdev->bars[vdev->msix->table_bar].mr,
1825 vdev->msix->table_bar, vdev->msix->table_offset,
1826 vdev->bars[vdev->msix->pba_bar].mr,
1827 vdev->msix->pba_bar, vdev->msix->pba_offset, pos,
1866 "vfio-no-msix-emulation", NULL)) {
1877 if (vdev->msix) {
1879 vdev->bars[vdev->msix->table_bar].mr,
1880 vdev->bars[vdev->msix->pba_bar].mr);
1881 g_free(vdev->msix->pending);
3018 g_free(vdev->msix);
3687 DEFINE_PROP_BOOL("x-no-kvm-msix", VFIOPCIDevice, no_kvm_msix, false),
3706 DEFINE_PROP_OFF_AUTO_PCIBAR("x-msix-relocation", VFIOPCIDevice, msix_relo,
3764 "x-no-kvm-msix",
3802 "x-msix-relocation",