[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 13/14] qdev: gpio: Define qdev_pass_gpios()
From: |
Peter Crosthwaite |
Subject: |
[Qemu-devel] [PATCH v2 13/14] qdev: gpio: Define qdev_pass_gpios() |
Date: |
Thu, 14 Aug 2014 22:36:30 -0700 |
Allows a container to take ownership of GPIOs in a contained
device and automatically connect them as GPIOs to the container.
This prepares for deprecation of the SYSBUS IRQ functionality, which
has this feature. We push it up to the device level instead of sysbus
level. There's nothing sysbus specific about passing GPIOs to
containers so its a legitimate device-level generic feature.
Signed-off-by: Peter Crosthwaite <address@hidden>
---
changed since v1:
Variablised ? : string expressions (Alex review).
hw/core/qdev.c | 26 ++++++++++++++++++++++++++
include/hw/qdev-core.h | 3 +++
2 files changed, 29 insertions(+)
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 2b96b5a..6d09d47 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -441,6 +441,32 @@ void qdev_connect_gpio_out(DeviceState * dev, int n,
qemu_irq pin)
qdev_connect_gpio_out_named(dev, NULL, n, pin);
}
+void qdev_pass_gpios(DeviceState *dev, DeviceState *container,
+ const char *name)
+{
+ int i;
+ NamedGPIOList *ngl = qdev_get_named_gpio_list(dev, name);
+
+ for (i = 0; i < ngl->num_in; i++) {
+ const char *nm = ngl->name ? ngl->name : "unnamed-gpio-in";
+ char *propname = g_strdup_printf("%s[%d]", nm, i);
+
+ object_property_add_alias(OBJECT(container), propname,
+ OBJECT(dev), propname,
+ &error_abort);
+ }
+ for (i = 0; i < ngl->num_out; i++) {
+ const char *nm = ngl->name ? ngl->name : "unnamed-gpio-out";
+ char *propname = g_strdup_printf("%s[%d]", nm, i);
+
+ object_property_add_alias(OBJECT(container), propname,
+ OBJECT(dev), propname,
+ &error_abort);
+ }
+ QLIST_REMOVE(ngl, node);
+ QLIST_INSERT_HEAD(&container->gpios, ngl, node);
+}
+
BusState *qdev_get_child_bus(DeviceState *dev, const char *name)
{
BusState *bus;
diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index e6b1cf0..abdbf42 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -289,6 +289,9 @@ void qdev_init_gpio_in_named(DeviceState *dev,
qemu_irq_handler handler,
void qdev_init_gpio_out_named(DeviceState *dev, qemu_irq *pins,
const char *name, int n);
+void qdev_pass_gpios(DeviceState *dev, DeviceState *container,
+ const char *name);
+
BusState *qdev_get_parent_bus(DeviceState *dev);
/*** BUS API. ***/
--
2.0.1.1.gfbfc394
- [Qemu-devel] [PATCH v2 03/14] qdev: gpio: Register GPIO outputs as QOM links, (continued)
- [Qemu-devel] [PATCH v2 03/14] qdev: gpio: Register GPIO outputs as QOM links, Peter Crosthwaite, 2014/08/15
- [Qemu-devel] [PATCH v2 04/14] qmp: qstring: Handle NULL strings, Peter Crosthwaite, 2014/08/15
- [Qemu-devel] [PATCH v2 05/14] qom: Allow clearing of a Link property, Peter Crosthwaite, 2014/08/15
- [Qemu-devel] [PATCH v2 06/14] qom: Demote already-has-a-parent to a regular error, Peter Crosthwaite, 2014/08/15
- [Qemu-devel] [PATCH v2 07/14] qdev: gpio: Re-impement qdev_connect_gpio QOM style, Peter Crosthwaite, 2014/08/15
- [Qemu-devel] [PATCH v2 08/14] qdev: gpio: Add API for intercepting a GPIO, Peter Crosthwaite, 2014/08/15
- [Qemu-devel] [PATCH v2 09/14] qtest/irq: Rework IRQ interception, Peter Crosthwaite, 2014/08/15
- [Qemu-devel] [PATCH v2 10/14] irq: Remove qemu_irq_intercept_out, Peter Crosthwaite, 2014/08/15
- [Qemu-devel] [PATCH v2 11/14] qdev: gpio: delete NamedGPIOList::out, Peter Crosthwaite, 2014/08/15
- [Qemu-devel] [PATCH v2 12/14] qdev: gpio: Remove qdev_init_gpio_out x1 restriction, Peter Crosthwaite, 2014/08/15
- [Qemu-devel] [PATCH v2 13/14] qdev: gpio: Define qdev_pass_gpios(),
Peter Crosthwaite <=
- [Qemu-devel] [PATCH v2 14/14] sysbus: Use TYPE_DEVICE GPIO functionality, Peter Crosthwaite, 2014/08/15
- Re: [Qemu-devel] [PATCH v2 00/14] GPIO/IRQ QOMification: Phase 2 - Getting rid of SYSBUS IRQs, Alexander Graf, 2014/08/21
- Re: [Qemu-devel] [PATCH v2 00/14] GPIO/IRQ QOMification: Phase 2 - Getting rid of SYSBUS IRQs, Alexander Graf, 2014/08/28