qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

virtio-pci.h (2632B)


      1 /*
      2  * libqos virtio PCI definitions
      3  *
      4  * Copyright (c) 2014 Marc MarĂ­
      5  *
      6  * This work is licensed under the terms of the GNU GPL, version 2 or later.
      7  * See the COPYING file in the top-level directory.
      8  */
      9 
     10 #ifndef LIBQOS_VIRTIO_PCI_H
     11 #define LIBQOS_VIRTIO_PCI_H
     12 
     13 #include "virtio.h"
     14 #include "pci.h"
     15 #include "qgraph.h"
     16 
     17 typedef struct QVirtioPCIMSIXOps QVirtioPCIMSIXOps;
     18 
     19 typedef struct QVirtioPCIDevice {
     20     QOSGraphObject obj;
     21     QVirtioDevice vdev;
     22     QPCIDevice *pdev;
     23     QPCIBar bar;
     24     const QVirtioPCIMSIXOps *msix_ops;
     25     uint16_t config_msix_entry;
     26     uint64_t config_msix_addr;
     27     uint32_t config_msix_data;
     28 
     29     int bar_idx;
     30 
     31     /* VIRTIO 1.0 */
     32     uint32_t common_cfg_offset;
     33     uint32_t notify_cfg_offset;
     34     uint32_t notify_off_multiplier;
     35     uint32_t isr_cfg_offset;
     36     uint32_t device_cfg_offset;
     37 } QVirtioPCIDevice;
     38 
     39 struct QVirtioPCIMSIXOps {
     40     /* Set the Configuration Vector for MSI-X */
     41     void (*set_config_vector)(QVirtioPCIDevice *d, uint16_t entry);
     42 
     43     /* Set the Queue Vector for MSI-X */
     44     void (*set_queue_vector)(QVirtioPCIDevice *d, uint16_t vq_idx,
     45                              uint16_t entry);
     46 };
     47 
     48 typedef struct QVirtQueuePCI {
     49     QVirtQueue vq;
     50     uint16_t msix_entry;
     51     uint64_t msix_addr;
     52     uint32_t msix_data;
     53 
     54     /* VIRTIO 1.0 */
     55     uint64_t notify_offset;
     56 } QVirtQueuePCI;
     57 
     58 void virtio_pci_init(QVirtioPCIDevice *dev, QPCIBus *bus, QPCIAddress * addr);
     59 QVirtioPCIDevice *virtio_pci_new(QPCIBus *bus, QPCIAddress * addr);
     60 
     61 /* virtio-pci object functions available for subclasses that
     62  * override the original start_hw and destroy
     63  * function. All virtio-xxx-pci subclass that override must
     64  * take care of calling these two functions in the respective
     65  * places
     66  */
     67 void qvirtio_pci_destructor(QOSGraphObject *obj);
     68 void qvirtio_pci_start_hw(QOSGraphObject *obj);
     69 
     70 
     71 void qvirtio_pci_device_enable(QVirtioPCIDevice *d);
     72 void qvirtio_pci_device_disable(QVirtioPCIDevice *d);
     73 
     74 void qvirtio_pci_set_msix_configuration_vector(QVirtioPCIDevice *d,
     75                                         QGuestAllocator *alloc, uint16_t entry);
     76 void qvirtqueue_pci_msix_setup(QVirtioPCIDevice *d, QVirtQueuePCI *vqpci,
     77                                         QGuestAllocator *alloc, uint16_t entry);
     78 
     79 /* Used by Legacy and Modern virtio-pci code */
     80 QVirtQueue *qvirtio_pci_virtqueue_setup_common(QVirtioDevice *d,
     81                                                QGuestAllocator *alloc,
     82                                                uint16_t index);
     83 void qvirtio_pci_virtqueue_cleanup_common(QVirtQueue *vq,
     84                                           QGuestAllocator *alloc);
     85 
     86 #endif