From patchwork Fri Oct 17 16:24:55 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 400583 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 095F3140076 for ; Sat, 18 Oct 2014 03:35:29 +1100 (AEDT) Received: from localhost ([::1]:33502 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XfAUx-00023x-2x for incoming@patchwork.ozlabs.org; Fri, 17 Oct 2014 12:35:27 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45206) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XfALI-0003VD-HS for qemu-devel@nongnu.org; Fri, 17 Oct 2014 12:25:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XfALD-0004eF-Gy for qemu-devel@nongnu.org; Fri, 17 Oct 2014 12:25:28 -0400 Received: from mail-wi0-x22a.google.com ([2a00:1450:400c:c05::22a]:42527) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XfALD-0004e7-BC for qemu-devel@nongnu.org; Fri, 17 Oct 2014 12:25:23 -0400 Received: by mail-wi0-f170.google.com with SMTP id hi2so4186109wib.1 for ; Fri, 17 Oct 2014 09:25:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=zPJYuaZlORtDYJUEbx0zbRr6jinueVTPKQXx6VoJG/s=; b=020uO6H/rB9Ga50Ug3+2ObkubOFBZ2L5U79v7feVDA9vgyxMfby7PFVsy2vSJesR5x PAZ/LICpWaGwf/2x3BdBRWxVPIuqWG66O3VCdP8hpjUJbg0Lgs8757ez+4ODAc9eFzQW 7ePbNKUsXESc5uGpccbEsHeguUjnmTkc4S6KS4rS5uGd5A8SS8FME9yRzdM7uEMdafIu PoBHeqzi+Ov2kxeDJoW04vr5DEYYzCrqUgHRB2RBQ2tNDTsBe0rM6dnCHHGmYn1gBJ76 MGuaJaIqlFJxA4UdfBsVTpz7pc8DCwn0lZFhcRJvWz/eA5mkKMAzRy9JHJYbsBSzldu6 ElaA== X-Received: by 10.180.12.50 with SMTP id v18mr39793wib.60.1413563122657; Fri, 17 Oct 2014 09:25:22 -0700 (PDT) Received: from yakj.usersys.redhat.com.com ([62.156.150.204]) by mx.google.com with ESMTPSA id h4sm2230141wjb.9.2014.10.17.09.25.21 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 17 Oct 2014 09:25:21 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Fri, 17 Oct 2014 18:24:55 +0200 Message-Id: <1413563095-27301-14-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1413563095-27301-1-git-send-email-pbonzini@redhat.com> References: <1413563095-27301-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2a00:1450:400c:c05::22a Cc: Peter Crosthwaite , afaerber@suse.de, agraf@suse.de Subject: [Qemu-devel] [PATCH qom v4 13/13] sysbus: Use TYPE_DEVICE GPIO functionality X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: Peter Crosthwaite Re-implement the Sysbus GPIOs to use the existing TYPE_DEVICE GPIO named framework. A constant string name is chosen to avoid conflicts with existing unnamed GPIOs. This unifies GPIOs are IRQs for sysbus devices and allows removal of all Sysbus state for GPIOs. Any existing and future-added functionality for GPIOs is now also available for sysbus IRQs. Reviewed-by: Alexander Graf Signed-off-by: Peter Crosthwaite Signed-off-by: Paolo Bonzini --- hw/core/sysbus.c | 20 +++----------------- include/hw/sysbus.h | 7 +++---- 2 files changed, 6 insertions(+), 21 deletions(-) diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c index 414e2a1..e55c3c1 100644 --- a/hw/core/sysbus.c +++ b/hw/core/sysbus.c @@ -41,11 +41,7 @@ static const TypeInfo system_bus_info = { void sysbus_connect_irq(SysBusDevice *dev, int n, qemu_irq irq) { - assert(n >= 0 && n < dev->num_irq); - dev->irqs[n] = NULL; - if (dev->irqp[n]) { - *dev->irqp[n] = irq; - } + qdev_connect_gpio_out_named(DEVICE(dev), SYSBUS_DEVICE_GPIO_IRQ, n, irq); } static void sysbus_mmio_map_common(SysBusDevice *dev, int n, hwaddr addr, @@ -89,22 +85,13 @@ void sysbus_mmio_map_overlap(SysBusDevice *dev, int n, hwaddr addr, /* Request an IRQ source. The actual IRQ object may be populated later. */ void sysbus_init_irq(SysBusDevice *dev, qemu_irq *p) { - int n; - - assert(dev->num_irq < QDEV_MAX_IRQ); - n = dev->num_irq++; - dev->irqp[n] = p; + qdev_init_gpio_out_named(DEVICE(dev), p, SYSBUS_DEVICE_GPIO_IRQ, 1); } /* Pass IRQs from a target device. */ void sysbus_pass_irq(SysBusDevice *dev, SysBusDevice *target) { - int i; - assert(dev->num_irq == 0); - dev->num_irq = target->num_irq; - for (i = 0; i < dev->num_irq; i++) { - dev->irqp[i] = target->irqp[i]; - } + qdev_pass_gpios(DEVICE(target), DEVICE(dev), SYSBUS_DEVICE_GPIO_IRQ); } void sysbus_init_mmio(SysBusDevice *dev, MemoryRegion *memory) @@ -210,7 +197,6 @@ static void sysbus_dev_print(Monitor *mon, DeviceState *dev, int indent) hwaddr size; int i; - monitor_printf(mon, "%*sirq %d\n", indent, "", s->num_irq); for (i = 0; i < s->num_mmio; i++) { size = memory_region_size(s->mmio[i].memory); monitor_printf(mon, "%*smmio " TARGET_FMT_plx "/" TARGET_FMT_plx "\n", diff --git a/include/hw/sysbus.h b/include/hw/sysbus.h index 0bb91a8..9fb1782 100644 --- a/include/hw/sysbus.h +++ b/include/hw/sysbus.h @@ -8,7 +8,6 @@ #define QDEV_MAX_MMIO 32 #define QDEV_MAX_PIO 32 -#define QDEV_MAX_IRQ 512 #define TYPE_SYSTEM_BUS "System" #define SYSTEM_BUS(obj) OBJECT_CHECK(IDEBus, (obj), TYPE_IDE_BUS) @@ -33,6 +32,9 @@ typedef struct SysBusDevice SysBusDevice; * SysBusDeviceClass is not overriding #DeviceClass.realize, so derived * classes overriding it are not required to invoke its implementation. */ + +#define SYSBUS_DEVICE_GPIO_IRQ "sysbus-irq" + typedef struct SysBusDeviceClass { /*< private >*/ DeviceClass parent_class; @@ -46,9 +48,6 @@ struct SysBusDevice { DeviceState parent_obj; /*< public >*/ - int num_irq; - qemu_irq irqs[QDEV_MAX_IRQ]; - qemu_irq *irqp[QDEV_MAX_IRQ]; int num_mmio; struct { hwaddr addr;