From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50501) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aOojv-0004GR-2S for qemu-devel@nongnu.org; Thu, 28 Jan 2016 10:44:08 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aOojr-0006WY-N1 for qemu-devel@nongnu.org; Thu, 28 Jan 2016 10:44:06 -0500 Received: from greensocs.com ([193.104.36.180]:33557) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aOojr-0006WP-9C for qemu-devel@nongnu.org; Thu, 28 Jan 2016 10:44:03 -0500 Message-ID: <56AA3740.7060509@greensocs.com> Date: Thu, 28 Jan 2016 16:44:00 +0100 From: Frederic Konrad MIME-Version: 1.0 References: <081cdaf70459a467622cdebd83e30c72ae16f251.1453237258.git.alistair.francis@xilinx.com> In-Reply-To: <081cdaf70459a467622cdebd83e30c72ae16f251.1453237258.git.alistair.francis@xilinx.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH v2 11/16] qdev: Define qdev_get_gpio_out List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alistair Francis , qemu-devel@nongnu.org Cc: edgar.iglesias@xilinx.com, peter.maydell@linaro.org, crosthwaitepeter@gmail.com, afaerber@suse.de, edgar.iglesias@gmail.com On 19/01/2016 23:35, Alistair Francis wrote: > From: Peter Crosthwaite > > 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 > Signed-off-by: Alistair Francis > --- > > 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 2c7101d..308e4a1 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); > } > =20 > +qemu_irq qdev_get_gpio_out_named(DeviceState *dev, const char *name, i= nt n) > +{ > + char *propname =3D g_strdup_printf("%s[%d]", > + name ? name : "unnamed-gpio-out",= n); > + return (qemu_irq)object_property_get_link(OBJECT(dev), propname, N= ULL); > +} Why don't we have the same implementation than qdev_get_gpio_in_named ? qemu_irq qdev_get_gpio_in_named(DeviceState *dev, const char *name, int n= ) { NamedGPIOList *gpio_list =3D qdev_get_named_gpio_list(dev, name); assert(n >=3D 0 && n < gpio_list->num_in); return gpio_list->in[n]; } Thanks, Fred > + > +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, i= nt 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); > =20 > qemu_irq qdev_get_gpio_in(DeviceState *dev, int n); > qemu_irq qdev_get_gpio_in_named(DeviceState *dev, const char *name, in= t n); > +qemu_irq qdev_get_gpio_out(DeviceState *dev, int n); > +qemu_irq qdev_get_gpio_out_named(DeviceState *dev, const char *name, i= nt n); > =20 > void qdev_connect_gpio_out(DeviceState *dev, int n, qemu_irq pin); > void qdev_connect_gpio_out_named(DeviceState *dev, const char *name, i= nt n,