Message ID | e6ff5d7175b828e1c91f4dcc91278b13388f5563.1463093051.git.alistair.francis@xilinx.com |
---|---|
State | New |
Headers | show |
On 12 May 2016 at 23:46, Alistair Francis <alistair.francis@xilinx.com> wrote: > From: Peter Crosthwaite <peter.crosthwaite@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.crosthwaite@xilinx.com> > Signed-off-by: Alistair Francis <alistair.francis@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 db41aa1..e3015d2 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); > +} This appears to be identical to the existing function qdev_get_gpio_out_connector() ? > + > +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 1ce02b2..0e216af 100644 > --- a/include/hw/qdev-core.h > +++ b/include/hw/qdev-core.h > @@ -285,6 +285,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); Doc comments for new global functions would be nice. thanks -- PMM
On Fri, Jun 10, 2016 at 4:48 AM, Peter Maydell <peter.maydell@linaro.org> wrote: > On 12 May 2016 at 23:46, Alistair Francis <alistair.francis@xilinx.com> wrote: >> From: Peter Crosthwaite <peter.crosthwaite@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.crosthwaite@xilinx.com> >> Signed-off-by: Alistair Francis <alistair.francis@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 db41aa1..e3015d2 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); >> +} > > This appears to be identical to the existing function > qdev_get_gpio_out_connector() ? It is, sorry about that. That function must have been added since the first patch series. I have just removed this patch. Thanks, Alistair > >> + >> +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 1ce02b2..0e216af 100644 >> --- a/include/hw/qdev-core.h >> +++ b/include/hw/qdev-core.h >> @@ -285,6 +285,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); > > Doc comments for new global functions would be nice. > > thanks > -- PMM >
diff --git a/hw/core/qdev.c b/hw/core/qdev.c index db41aa1..e3015d2 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 1ce02b2..0e216af 100644 --- a/include/hw/qdev-core.h +++ b/include/hw/qdev-core.h @@ -285,6 +285,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,