[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC 2/6] hw/core/platform-bus: initialization notifier
From: |
Baptiste Reynal |
Subject: |
[Qemu-devel] [RFC 2/6] hw/core/platform-bus: initialization notifier |
Date: |
Fri, 12 Jun 2015 16:20:06 +0200 |
Add a platform_bus_link_done_notifier for devices to be notified once
the platform bus is initialized. Address and IRQs for platform devices
are unknown at device realization, we need to notify the device once
the platform bus gathered all devices, i.e. when those resources are
ready. This is required for some device initialization
(e.g. the vSMMU base address needs to be set on the KVM device).
Signed-off-by: Baptiste Reynal <address@hidden>
---
hw/core/platform-bus.c | 13 +++++++++++++
include/hw/platform-bus.h | 1 +
2 files changed, 14 insertions(+)
diff --git a/hw/core/platform-bus.c b/hw/core/platform-bus.c
index 0f052b3..8642dfc 100644
--- a/hw/core/platform-bus.c
+++ b/hw/core/platform-bus.c
@@ -24,6 +24,18 @@
#include "exec/address-spaces.h"
#include "sysemu/sysemu.h"
+static NotifierList platform_bus_link_done_notifiers =
+ NOTIFIER_LIST_INITIALIZER(platform_bus_link_done_notifiers);
+
+void qemu_add_platform_bus_link_done_notifier(Notifier *notify)
+{
+ notifier_list_add(&platform_bus_link_done_notifiers, notify);
+}
+
+static void qemu_run_platform_bus_link_done_notifiers(void)
+{
+ notifier_list_notify(&platform_bus_link_done_notifiers, NULL);
+}
/*
* Returns the PlatformBus IRQ number for a SysBusDevice irq number or -1 if
@@ -196,6 +208,7 @@ static void platform_bus_init_notify(Notifier *notifier,
void *data)
plaform_bus_refresh_irqs(pb);
foreach_dynamic_sysbus_device(link_sysbus_device, pb);
+ qemu_run_platform_bus_link_done_notifiers();
}
static void platform_bus_realize(DeviceState *dev, Error **errp)
diff --git a/include/hw/platform-bus.h b/include/hw/platform-bus.h
index bd42b83..3c3f96b 100644
--- a/include/hw/platform-bus.h
+++ b/include/hw/platform-bus.h
@@ -53,5 +53,6 @@ int platform_bus_get_irqn(PlatformBusDevice *platform_bus,
SysBusDevice *sbdev,
int n);
hwaddr platform_bus_get_mmio_addr(PlatformBusDevice *pbus, SysBusDevice *sbdev,
int n);
+void qemu_add_platform_bus_link_done_notifier(Notifier *notify);
#endif /* !HW_PLATFORM_BUS_H */
--
2.4.3
- [Qemu-devel] [RFC 0/6] vSMMU initialization, Baptiste Reynal, 2015/06/12
- [Qemu-devel] [RFC 1/6] headers sync, Baptiste Reynal, 2015/06/12
- [Qemu-devel] [RFC 2/6] hw/core/platform-bus: initialization notifier,
Baptiste Reynal <=
- [Qemu-devel] [RFC 3/6] hw/core/platform-bus: add base_address field, Baptiste Reynal, 2015/06/12
- [Qemu-devel] [RFC 4/6] hw/vfio: vsmmu device, Baptiste Reynal, 2015/06/12
- [Qemu-devel] [RFC 5/6] hw/arm/sysbus-fdt: enable vsmmu dynamic instantiation, Baptiste Reynal, 2015/06/12
- [Qemu-devel] [RFC 6/6] hw/arm/sysbus-fdt: add smmu masters in device tree, Baptiste Reynal, 2015/06/12
- Re: [Qemu-devel] [RFC 0/6] vSMMU initialization, Will Deacon, 2015/06/12