xref: /qemu/tests/qtest/libqos/virtio-pci.h (revision 0c0eb30260b424d2a68603b89f1d829db18772c2)
1311e666aSMarc Marí /*
2311e666aSMarc Marí  * libqos virtio PCI definitions
3311e666aSMarc Marí  *
4311e666aSMarc Marí  * Copyright (c) 2014 Marc Marí
5311e666aSMarc Marí  *
6311e666aSMarc Marí  * This work is licensed under the terms of the GNU GPL, version 2 or later.
7311e666aSMarc Marí  * See the COPYING file in the top-level directory.
8311e666aSMarc Marí  */
9311e666aSMarc Marí 
10311e666aSMarc Marí #ifndef LIBQOS_VIRTIO_PCI_H
11311e666aSMarc Marí #define LIBQOS_VIRTIO_PCI_H
12311e666aSMarc Marí 
13311e666aSMarc Marí #include "libqos/virtio.h"
14311e666aSMarc Marí #include "libqos/pci.h"
15311e666aSMarc Marí 
16311e666aSMarc Marí typedef struct QVirtioPCIDevice {
17311e666aSMarc Marí     QVirtioDevice vdev;
18311e666aSMarc Marí     QPCIDevice *pdev;
19b4ba67d9SDavid Gibson     QPCIBar bar;
2058368113SMarc Marí     uint16_t config_msix_entry;
2158368113SMarc Marí     uint64_t config_msix_addr;
2258368113SMarc Marí     uint32_t config_msix_data;
23311e666aSMarc Marí } QVirtioPCIDevice;
24311e666aSMarc Marí 
2558368113SMarc Marí typedef struct QVirtQueuePCI {
2658368113SMarc Marí     QVirtQueue vq;
2758368113SMarc Marí     uint16_t msix_entry;
2858368113SMarc Marí     uint64_t msix_addr;
2958368113SMarc Marí     uint32_t msix_data;
3058368113SMarc Marí } QVirtQueuePCI;
3158368113SMarc Marí 
3246e0cf76SMarc Marí extern const QVirtioBus qvirtio_pci;
3346e0cf76SMarc Marí 
34311e666aSMarc Marí void qvirtio_pci_foreach(QPCIBus *bus, uint16_t device_type,
35311e666aSMarc Marí                 void (*func)(QVirtioDevice *d, void *data), void *data);
36311e666aSMarc Marí QVirtioPCIDevice *qvirtio_pci_device_find(QPCIBus *bus, uint16_t device_type);
37*0c0eb302SMarc-André Lureau void qvirtio_pci_device_free(QVirtioPCIDevice *dev);
38*0c0eb302SMarc-André Lureau 
3946e0cf76SMarc Marí void qvirtio_pci_device_enable(QVirtioPCIDevice *d);
4046e0cf76SMarc Marí void qvirtio_pci_device_disable(QVirtioPCIDevice *d);
4158368113SMarc Marí 
4258368113SMarc Marí void qvirtio_pci_set_msix_configuration_vector(QVirtioPCIDevice *d,
4358368113SMarc Marí                                         QGuestAllocator *alloc, uint16_t entry);
4458368113SMarc Marí void qvirtqueue_pci_msix_setup(QVirtioPCIDevice *d, QVirtQueuePCI *vqpci,
4558368113SMarc Marí                                         QGuestAllocator *alloc, uint16_t entry);
46311e666aSMarc Marí #endif
47