From: Isaku Yamahata Date: Tue, 19 Oct 2010 09:06:29 +0000 (+0900) Subject: pci: introduce helper function to handle msi-x and msi. X-Git-Tag: v0.14.0-rc0~500^2^2~17 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a5d1fd20ccfd1fbe840729378e4adbc3eb0f8306;p=thirdparty%2Fqemu.git pci: introduce helper function to handle msi-x and msi. this patch implements helper functions to handle msi-x and msi uniformly. They will be used later. Signed-off-by: Isaku Yamahata Signed-off-by: Michael S. Tsirkin --- diff --git a/hw/pci.c b/hw/pci.c index e3462a93841..300079f4af3 100644 --- a/hw/pci.c +++ b/hw/pci.c @@ -25,6 +25,8 @@ #include "pci.h" #include "pci_bridge.h" #include "pci_internals.h" +#include "msix.h" +#include "msi.h" #include "monitor.h" #include "net.h" #include "sysemu.h" @@ -1034,6 +1036,23 @@ static void pci_set_irq(void *opaque, int irq_num, int level) pci_change_irq_level(pci_dev, irq_num, change); } +bool pci_msi_enabled(PCIDevice *dev) +{ + return msix_enabled(dev) || msi_enabled(dev); +} + +void pci_msi_notify(PCIDevice *dev, unsigned int vector) +{ + if (msix_enabled(dev)) { + msix_notify(dev, vector); + } else if (msi_enabled(dev)) { + msi_notify(dev, vector); + } else { + /* MSI/MSI-X must be enabled */ + abort(); + } +} + /***********************************************************/ /* monitor info on PCI */ diff --git a/hw/pci.h b/hw/pci.h index 752e652ecaa..3072a5f8542 100644 --- a/hw/pci.h +++ b/hw/pci.h @@ -239,6 +239,9 @@ void do_pci_info_print(Monitor *mon, const QObject *data); void do_pci_info(Monitor *mon, QObject **ret_data); void pci_bridge_update_mappings(PCIBus *b); +bool pci_msi_enabled(PCIDevice *dev); +void pci_msi_notify(PCIDevice *dev, unsigned int vector); + static inline void pci_set_byte(uint8_t *config, uint8_t val) {