summary refs log tree commit diff stats
path: root/hw/pci.h
diff options
context:
space:
mode:
authorJan Kiszka <jan.kiszka@siemens.com>2012-05-17 10:32:31 -0300
committerAvi Kivity <avi@redhat.com>2012-05-21 19:22:49 +0300
commit2cdfe53c5f502415932de552c0c7dad369954d4c (patch)
tree7eb856f0631583a65770a9e6417962612005cedd /hw/pci.h
parent5b5f1330da2d7e5b5cbde8c60738774b2bd8692f (diff)
downloadfocaccia-qemu-2cdfe53c5f502415932de552c0c7dad369954d4c.tar.gz
focaccia-qemu-2cdfe53c5f502415932de552c0c7dad369954d4c.zip
msix: Introduce vector notifiers
Vector notifiers shall be triggered by the MSI/MSI-X core whenever a
relevant configuration change is programmed by the guest. In case of
MSI-X, changes are reported when the effective mask (global &&
per-vector) alters its state. On unmask, the current vector
configuration is included in the event report. This allows users - e.g.
virtio-pci layer - to transfer this information to external MSI-X
routing subsystems - like vhost + KVM in-kernel irqchip.

This implementation only provides MSI-X support, but extension to MSI is
feasible and will be provided later on when adding support for KVM PCI
device assignment.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'hw/pci.h')
-rw-r--r--hw/pci.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/hw/pci.h b/hw/pci.h
index 8d0aa498e5..c3cacce046 100644
--- a/hw/pci.h
+++ b/hw/pci.h
@@ -173,6 +173,10 @@ typedef struct PCIDeviceClass {
     const char *romfile;
 } PCIDeviceClass;
 
+typedef int (*MSIVectorUseNotifier)(PCIDevice *dev, unsigned int vector,
+                                      MSIMessage msg);
+typedef void (*MSIVectorReleaseNotifier)(PCIDevice *dev, unsigned int vector);
+
 struct PCIDevice {
     DeviceState qdev;
     /* PCI config space */
@@ -243,6 +247,10 @@ struct PCIDevice {
     bool has_rom;
     MemoryRegion rom;
     uint32_t rom_bar;
+
+    /* MSI-X notifiers */
+    MSIVectorUseNotifier msix_vector_use_notifier;
+    MSIVectorReleaseNotifier msix_vector_release_notifier;
 };
 
 void pci_register_bar(PCIDevice *pci_dev, int region_num,