From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34516) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bDtkq-0001AO-Uh for qemu-devel@nongnu.org; Fri, 17 Jun 2016 09:24:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bDtko-0004s0-RL for qemu-devel@nongnu.org; Fri, 17 Jun 2016 09:24:11 -0400 References: <1466169069-29375-1-git-send-email-real@ispras.ru> <1466169069-29375-8-git-send-email-real@ispras.ru> From: Paolo Bonzini Message-ID: <629e5ee7-7593-de6d-6943-69099641e32f@redhat.com> Date: Fri, 17 Jun 2016 15:23:55 +0200 MIME-Version: 1.0 In-Reply-To: <1466169069-29375-8-git-send-email-real@ispras.ru> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 07/13] pckbd: handle A20 IRQ as GPIO List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Efimov Vasily , qemu-devel@nongnu.org Cc: John Snow , qemu-block@nongnu.org, Gerd Hoffmann , "Michael S. Tsirkin" , Kevin Wolf , Max Reitz , Richard Henderson , Eduardo Habkost , Peter Maydell , Kirill Batuzov On 17/06/2016 15:11, Efimov Vasily wrote: > The i8042 device has outgouing IRQ line A20. Currently the IRQ is referenced > by a pointer which normally is set during machine initialization. The pointer > is never changed at runtime. So common GPIO model can be applied to A20 IRQ > line. Note that checking for IRQ to be connected as in previous version > of code is not required because qemu_set_irq will do it. > > Signed-off-by: Efimov Vasily > --- > hw/input/pckbd.c | 21 +++++++-------------- > 1 file changed, 7 insertions(+), 14 deletions(-) > > diff --git a/hw/input/pckbd.c b/hw/input/pckbd.c > index 1d932ec..1406b6b 100644 > --- a/hw/input/pckbd.c > +++ b/hw/input/pckbd.c > @@ -146,7 +146,7 @@ typedef struct KBDState { > > qemu_irq irq_kbd; > qemu_irq irq_mouse; > - qemu_irq *a20_out; > + qemu_irq a20_out; > hwaddr mask; > } KBDState; > > @@ -224,9 +224,7 @@ static void outport_write(KBDState *s, uint32_t val) > { > DPRINTF("kbd: write outport=0x%02x\n", val); > s->outport = val; > - if (s->a20_out) { > - qemu_set_irq(*s->a20_out, (val >> 1) & 1); > - } > + qemu_set_irq(s->a20_out, (val >> 1) & 1); > if (!(val & 1)) { > qemu_system_reset_request(); > } > @@ -295,15 +293,11 @@ static void kbd_write_command(void *opaque, hwaddr addr, > kbd_queue(s, s->outport, 0); > break; > case KBD_CCMD_ENABLE_A20: > - if (s->a20_out) { > - qemu_irq_raise(*s->a20_out); > - } > + qemu_irq_raise(s->a20_out); > s->outport |= KBD_OUT_A20; > break; > case KBD_CCMD_DISABLE_A20: > - if (s->a20_out) { > - qemu_irq_lower(*s->a20_out); > - } > + qemu_irq_lower(s->a20_out); > s->outport &= ~KBD_OUT_A20; > break; > case KBD_CCMD_RESET: > @@ -507,10 +501,7 @@ void i8042_isa_mouse_fake_event(void *opaque) > > void i8042_setup_a20_line(ISADevice *dev, qemu_irq *a20_out) > { > - ISAKBDState *isa = I8042(dev); > - KBDState *s = &isa->kbd; > - > - s->a20_out = a20_out; > + qdev_connect_gpio_out(DEVICE(dev), 0, *a20_out); > } > > static const VMStateDescription vmstate_kbd_isa = { > @@ -552,6 +543,8 @@ static void i8042_initfn(Object *obj) > "i8042-data", 1); > memory_region_init_io(isa_s->io + 1, obj, &i8042_cmd_ops, s, > "i8042-cmd", 1); > + > + qdev_init_gpio_out(DEVICE(obj), &s->a20_out, 1); While at it, please use qdev_init_gpio_out_named and qdev_connect_gpio_out_named with "a20" as the name. Paolo > } > > static void i8042_realizefn(DeviceState *dev, Error **errp) >