From: Peter Crosthwaite <peter.crosthwa...@xilinx.com> An API similar to the existing qdev_get_gpio_in() except gets outputs. Useful for:
1: Implementing lightweight devices that don't want to keep pointers to their own GPIOs. They can get their GPIO pointers at runtime from QOM using this API. 2: testing or debugging code which may wish to override the hardware generated value of of a GPIO with a user specified value (E.G. interrupt injection). Signed-off-by: Peter Crosthwaite <peter.crosthwa...@xilinx.com> Signed-off-by: Alistair Francis <alistair.fran...@xilinx.com> --- hw/core/qdev.c | 12 ++++++++++++ include/hw/qdev-core.h | 2 ++ 2 files changed, 14 insertions(+) diff --git a/hw/core/qdev.c b/hw/core/qdev.c index 655f5d5..57ce4e7 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -489,6 +489,18 @@ qemu_irq qdev_get_gpio_in(DeviceState *dev, int n) return qdev_get_gpio_in_named(dev, NULL, n); } +qemu_irq qdev_get_gpio_out_named(DeviceState *dev, const char *name, int n) +{ + char *propname = g_strdup_printf("%s[%d]", + name ? name : "unnamed-gpio-out", n); + return (qemu_irq)object_property_get_link(OBJECT(dev), propname, NULL); +} + +qemu_irq qdev_get_gpio_out(DeviceState *dev, int n) +{ + return qdev_get_gpio_out_named(dev, NULL, n); +} + void qdev_connect_gpio_out_named(DeviceState *dev, const char *name, int n, qemu_irq pin) { diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h index abcdee8..0a09b8a 100644 --- a/include/hw/qdev-core.h +++ b/include/hw/qdev-core.h @@ -287,6 +287,8 @@ bool qdev_machine_modified(void); qemu_irq qdev_get_gpio_in(DeviceState *dev, int n); qemu_irq qdev_get_gpio_in_named(DeviceState *dev, const char *name, int n); +qemu_irq qdev_get_gpio_out(DeviceState *dev, int n); +qemu_irq qdev_get_gpio_out_named(DeviceState *dev, const char *name, int n); void qdev_connect_gpio_out(DeviceState *dev, int n, qemu_irq pin); void qdev_connect_gpio_out_named(DeviceState *dev, const char *name, int n, -- 2.5.0