void qvirtqueue_pci_msix_setup(QVirtioPCIDevice *d, QVirtQueuePCI *vqpci,

                                        QGuestAllocator *alloc, uint16_t entry)

{

    uint16_t vector;

    uint32_t control;

    void *addr;



    g_assert(d->pdev->msix_enabled);

    addr = d->pdev->msix_table + (entry * 16);



    g_assert_cmpint(entry, >=, 0);

    g_assert_cmpint(entry, <, qpci_msix_table_size(d->pdev));

    vqpci->msix_entry = entry;



    vqpci->msix_addr = guest_alloc(alloc, 4);

    qpci_io_writel(d->pdev, addr + PCI_MSIX_ENTRY_LOWER_ADDR,

                                                    vqpci->msix_addr & ~0UL);

    qpci_io_writel(d->pdev, addr + PCI_MSIX_ENTRY_UPPER_ADDR,

                                            (vqpci->msix_addr >> 32) & ~0UL);

    qpci_io_writel(d->pdev, addr + PCI_MSIX_ENTRY_DATA, vqpci->msix_data);



    control = qpci_io_readl(d->pdev, addr + PCI_MSIX_ENTRY_VECTOR_CTRL);

    qpci_io_writel(d->pdev, addr + PCI_MSIX_ENTRY_VECTOR_CTRL,

                                        control & ~PCI_MSIX_ENTRY_CTRL_MASKBIT);



    qvirtio_pci_queue_select(&d->vdev, vqpci->vq.index);

    qpci_io_writew(d->pdev, d->addr + VIRTIO_MSI_QUEUE_VECTOR, entry);

    vector = qpci_io_readw(d->pdev, d->addr + VIRTIO_MSI_QUEUE_VECTOR);

    g_assert_cmphex(vector, !=, VIRTIO_MSI_NO_VECTOR);

}

void qvirtqueue_pci_msix_setup(QVirtioPCIDevice *d, QVirtQueuePCI *vqpci,

                                        QGuestAllocator *alloc, uint16_t entry)

{

    uint16_t vector;

    uint32_t control;

    void *addr;



    g_assert(d->pdev->msix_enabled);

    addr = d->pdev->msix_table + (entry * 16);



    g_assert_cmpint(entry, >=, 0);

    g_assert_cmpint(entry, <, qpci_msix_table_size(d->pdev));

    vqpci->msix_entry = entry;



    vqpci->msix_addr = guest_alloc(alloc, 4);

    qpci_io_writel(d->pdev, addr + PCI_MSIX_ENTRY_LOWER_ADDR,

                                                    vqpci->msix_addr & ~0UL);

    qpci_io_writel(d->pdev, addr + PCI_MSIX_ENTRY_UPPER_ADDR,

                                            (vqpci->msix_addr >> 32) & ~0UL);

    qpci_io_writel(d->pdev, addr + PCI_MSIX_ENTRY_DATA, vqpci->msix_data);



    control = qpci_io_readl(d->pdev, addr + PCI_MSIX_ENTRY_VECTOR_CTRL);

    qpci_io_writel(d->pdev, addr + PCI_MSIX_ENTRY_VECTOR_CTRL,

                                        control & ~PCI_MSIX_ENTRY_CTRL_MASKBIT);



    qvirtio_pci_queue_select(&d->vdev, vqpci->vq.index);

    qpci_io_writew(d->pdev, d->addr + VIRTIO_MSI_QUEUE_VECTOR, entry);

    vector = qpci_io_readw(d->pdev, d->addr + VIRTIO_MSI_QUEUE_VECTOR);

    g_assert_cmphex(vector, !=, VIRTIO_MSI_NO_VECTOR);

}

    void *addr;     addr = d->pdev->msix_table + (entry * 16);     qpci_io_writel(d->pdev, addr + PCI_MSIX_ENTRY_LOWER_ADDR,                                                     vqpci->msix_addr & ~0UL);     qpci_io_writel(d->pdev, addr + PCI_MSIX_ENTRY_UPPER_ADDR,                                             (vqpci->msix_addr >> 32) & ~0UL);     qpci_io_writel(d->pdev, addr + PCI_MSIX_ENTRY_DATA, vqpci->msix_data);     control = qpci_io_readl(d->pdev, addr + PCI_MSIX_ENTRY_VECTOR_CTRL);     qpci_io_writel(d->pdev, addr + PCI_MSIX_ENTRY_VECTOR_CTRL,                                         control & ~PCI_MSIX_ENTRY_CTRL_MASKBIT);     qpci_io_writew(d->pdev, d->addr + VIRTIO_MSI_QUEUE_VECTOR, entry);     vector = qpci_io_readw(d->pdev, d->addr + VIRTIO_MSI_QUEUE_VECTOR);     void *addr;     addr = d->pdev->msix_table + (entry * 16);     qpci_io_writel(d->pdev, addr + PCI_MSIX_ENTRY_LOWER_ADDR,     qpci_io_writel(d->pdev, addr + PCI_MSIX_ENTRY_UPPER_ADDR,     control = qpci_io_readl(d->pdev, addr + PCI_MSIX_ENTRY_VECTOR_CTRL);     qpci_io_writel(d->pdev, addr + PCI_MSIX_ENTRY_VECTOR_CTRL,                                         control & ~PCI_MSIX_ENTRY_CTRL_MASKBIT);     void *addr;
void FUNC_0(QVirtioPCIDevice *VAR_0, QVirtQueuePCI *VAR_1,

                                        QGuestAllocator *VAR_2, uint16_t VAR_3)

{

    uint16_t vector;

    uint32_t control;

    void *VAR_4;



    g_assert(VAR_0->pdev->msix_enabled);

    VAR_4 = VAR_0->pdev->msix_table + (VAR_3 * 16);



    g_assert_cmpint(VAR_3, >=, 0);

    g_assert_cmpint(VAR_3, <, qpci_msix_table_size(VAR_0->pdev));

    VAR_1->msix_entry = VAR_3;



    VAR_1->msix_addr = guest_alloc(VAR_2, 4);

    qpci_io_writel(VAR_0->pdev, VAR_4 + PCI_MSIX_ENTRY_LOWER_ADDR,

                                                    VAR_1->msix_addr & ~0UL);

    qpci_io_writel(VAR_0->pdev, VAR_4 + PCI_MSIX_ENTRY_UPPER_ADDR,

                                            (VAR_1->msix_addr >> 32) & ~0UL);

    qpci_io_writel(VAR_0->pdev, VAR_4 + PCI_MSIX_ENTRY_DATA, VAR_1->msix_data);



    control = qpci_io_readl(VAR_0->pdev, VAR_4 + PCI_MSIX_ENTRY_VECTOR_CTRL);

    qpci_io_writel(VAR_0->pdev, VAR_4 + PCI_MSIX_ENTRY_VECTOR_CTRL,

                                        control & ~PCI_MSIX_ENTRY_CTRL_MASKBIT);



    qvirtio_pci_queue_select(&VAR_0->vdev, VAR_1->vq.index);

    qpci_io_writew(VAR_0->pdev, VAR_0->VAR_4 + VIRTIO_MSI_QUEUE_VECTOR, VAR_3);

    vector = qpci_io_readw(VAR_0->pdev, VAR_0->VAR_4 + VIRTIO_MSI_QUEUE_VECTOR);

    g_assert_cmphex(vector, !=, VIRTIO_MSI_NO_VECTOR);

}

void FUNC_0(QVirtioPCIDevice *VAR_0, QVirtQueuePCI *VAR_1,
QGuestAllocator *VAR_2, uint16_t VAR_3)
{ uint16_t vector; uint32_t control; void *VAR_4; g_assert(VAR_0->pdev->msix_enabled); VAR_4 = VAR_0->pdev->msix_table + (VAR_3 * 16); g_assert_cmpint(VAR_3, >=, 0); g_assert_cmpint(VAR_3, <, qpci_msix_table_size(VAR_0->pdev)); VAR_1->msix_entry = VAR_3; VAR_1->msix_addr = guest_alloc(VAR_2, 4); qpci_io_writel(VAR_0->pdev, VAR_4 + PCI_MSIX_ENTRY_LOWER_ADDR,
VAR_1->msix_addr & ~0UL); qpci_io_writel(VAR_0->pdev, VAR_4 + PCI_MSIX_ENTRY_UPPER_ADDR,
(VAR_1->msix_addr >> 32) & ~0UL); qpci_io_writel(VAR_0->pdev, VAR_4 + PCI_MSIX_ENTRY_DATA, VAR_1->msix_data); control = qpci_io_readl(VAR_0->pdev, VAR_4 + PCI_MSIX_ENTRY_VECTOR_CTRL); qpci_io_writel(VAR_0->pdev, VAR_4 + PCI_MSIX_ENTRY_VECTOR_CTRL,
control & ~PCI_MSIX_ENTRY_CTRL_MASKBIT); qvirtio_pci_queue_select(&VAR_0->vdev, VAR_1->vq.index); qpci_io_writew(VAR_0->pdev, VAR_0->VAR_4 + VIRTIO_MSI_QUEUE_VECTOR, VAR_3); vector = qpci_io_readw(VAR_0->pdev, VAR_0->VAR_4 + VIRTIO_MSI_QUEUE_VECTOR); g_assert_cmphex(vector, !=, VIRTIO_MSI_NO_VECTOR); }