cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

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
     17typedef struct QVirtioPCIMSIXOps QVirtioPCIMSIXOps;
     18
     19typedef 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
     39struct 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
     48typedef 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
     58void virtio_pci_init(QVirtioPCIDevice *dev, QPCIBus *bus, QPCIAddress * addr);
     59QVirtioPCIDevice *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 */
     67void qvirtio_pci_destructor(QOSGraphObject *obj);
     68void qvirtio_pci_start_hw(QOSGraphObject *obj);
     69
     70
     71void qvirtio_pci_device_enable(QVirtioPCIDevice *d);
     72void qvirtio_pci_device_disable(QVirtioPCIDevice *d);
     73
     74void qvirtio_pci_set_msix_configuration_vector(QVirtioPCIDevice *d,
     75                                        QGuestAllocator *alloc, uint16_t entry);
     76void qvirtqueue_pci_msix_setup(QVirtioPCIDevice *d, QVirtQueuePCI *vqpci,
     77                                        QGuestAllocator *alloc, uint16_t entry);
     78
     79/* Used by Legacy and Modern virtio-pci code */
     80QVirtQueue *qvirtio_pci_virtqueue_setup_common(QVirtioDevice *d,
     81                                               QGuestAllocator *alloc,
     82                                               uint16_t index);
     83void qvirtio_pci_virtqueue_cleanup_common(QVirtQueue *vq,
     84                                          QGuestAllocator *alloc);
     85
     86#endif