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