qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH v2 2/3] hw/pci: Introduce msi_device_id()


From: Pavel Fedin
Subject: [Qemu-devel] [PATCH v2 2/3] hw/pci: Introduce msi_device_id()
Date: Wed, 14 Oct 2015 10:53:16 +0300

For GICv3 ITS implementation we are going to use IDs in KVM IRQ routing
code. This patch introduces reusable convenient way to obtain it from the
device pointer.

Since device ID is an architecture-specific thing, the function can be
overridden on per-architecture basis. Default stub just returns 0.

Signed-off-by: Pavel Fedin <address@hidden>
---
 hw/pci/msi.c             |  2 +-
 include/hw/pci/msi.h     |  1 +
 stubs/Makefile.objs      |  1 +
 stubs/msi.c              | 16 ++++++++++++++++
 target-arm/Makefile.objs |  1 +
 target-arm/msi.c         | 16 ++++++++++++++++
 6 files changed, 36 insertions(+), 1 deletion(-)
 create mode 100644 stubs/msi.c
 create mode 100644 target-arm/msi.c

diff --git a/hw/pci/msi.c b/hw/pci/msi.c
index f9c0484..f18bb56 100644
--- a/hw/pci/msi.c
+++ b/hw/pci/msi.c
@@ -294,7 +294,7 @@ void msi_send_message(PCIDevice *dev, MSIMessage msg)
 {
     MemTxAttrs attrs = {};
 
-    attrs.stream_id = (pci_bus_num(dev->bus) << 8) | dev->devfn;
+    attrs.stream_id = msi_device_id(dev);
     address_space_stl_le(&dev->bus_master_as, msg.address, msg.data,
                          attrs, NULL);
 }
diff --git a/include/hw/pci/msi.h b/include/hw/pci/msi.h
index 50e452b..3e557d5 100644
--- a/include/hw/pci/msi.h
+++ b/include/hw/pci/msi.h
@@ -42,6 +42,7 @@ void msi_notify(PCIDevice *dev, unsigned int vector);
 void msi_send_message(PCIDevice *dev, MSIMessage msg);
 void msi_write_config(PCIDevice *dev, uint32_t addr, uint32_t val, int len);
 unsigned int msi_nr_vectors_allocated(const PCIDevice *dev);
+uint16_t msi_device_id(PCIDevice *dev);
 
 static inline bool msi_present(const PCIDevice *dev)
 {
diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs
index 85e4e81..d2261d1 100644
--- a/stubs/Makefile.objs
+++ b/stubs/Makefile.objs
@@ -22,6 +22,7 @@ stub-obj-y += migr-blocker.o
 stub-obj-y += mon-is-qmp.o
 stub-obj-y += mon-printf.o
 stub-obj-y += monitor-init.o
+stub-obj-$(CONFIG_PCI) += msi.o
 stub-obj-y += notify-event.o
 stub-obj-$(CONFIG_SPICE) += qemu-chr-open-spice.o
 stub-obj-y += qtest.o
diff --git a/stubs/msi.c b/stubs/msi.c
new file mode 100644
index 0000000..99808c0
--- /dev/null
+++ b/stubs/msi.c
@@ -0,0 +1,16 @@
+/*
+ * QEMU architecture-specific MSI functions
+ *
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ * Written by Pavel Fedin
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ *
+ */
+#include "hw/pci/msi.h"
+
+uint16_t msi_device_id(PCIDevice *dev)
+{
+    return 0;
+}
diff --git a/target-arm/Makefile.objs b/target-arm/Makefile.objs
index 9460b40..9e75c66 100644
--- a/target-arm/Makefile.objs
+++ b/target-arm/Makefile.objs
@@ -1,5 +1,6 @@
 obj-y += arm-semi.o
 obj-$(CONFIG_SOFTMMU) += machine.o
+obj-$(CONFIG_PCI) += msi.o
 obj-$(CONFIG_KVM) += kvm.o
 obj-$(call land,$(CONFIG_KVM),$(call lnot,$(TARGET_AARCH64))) += kvm32.o
 obj-$(call land,$(CONFIG_KVM),$(TARGET_AARCH64)) += kvm64.o
diff --git a/target-arm/msi.c b/target-arm/msi.c
new file mode 100644
index 0000000..8da01af
--- /dev/null
+++ b/target-arm/msi.c
@@ -0,0 +1,16 @@
+/*
+ * QEMU ARM specific MSI functions
+ *
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ * Written by Pavel Fedin
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ *
+ */
+#include "hw/pci/msi.h"
+
+uint16_t msi_device_id(PCIDevice *dev)
+{
+    return (pci_bus_num(dev->bus) << 8) | dev->devfn;
+}
-- 
2.4.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]