From a5d1fd20ccfd1fbe840729378e4adbc3eb0f8306 Mon Sep 17 00:00:00 2001 From: Isaku Yamahata Date: Tue, 19 Oct 2010 18:06:29 +0900 Subject: [PATCH] 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 --- hw/pci.c | 19 +++++++++++++++++++ hw/pci.h | 3 +++ 2 files changed, 22 insertions(+) diff --git a/hw/pci.c b/hw/pci.c index e3462a9384..300079f4af 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 752e652eca..3072a5f854 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) {