From nobody Tue Feb 10 01:32:57 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1487257521758553.8382796449707; Thu, 16 Feb 2017 07:05:21 -0800 (PST) Received: from localhost ([::1]:47207 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ceNcT-00034X-4x for importer@patchew.org; Thu, 16 Feb 2017 10:05:17 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51854) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ceN6a-0003lT-Ev for qemu-devel@nongnu.org; Thu, 16 Feb 2017 09:32:21 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ceN6Z-00087i-12 for qemu-devel@nongnu.org; Thu, 16 Feb 2017 09:32:20 -0500 Received: from mail-wm0-x242.google.com ([2a00:1450:400c:c09::242]:34151) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ceN6Y-00087P-Mi for qemu-devel@nongnu.org; Thu, 16 Feb 2017 09:32:18 -0500 Received: by mail-wm0-x242.google.com with SMTP id c85so3430026wmi.1 for ; Thu, 16 Feb 2017 06:32:18 -0800 (PST) Received: from 640k.lan (94-39-187-56.adsl-ull.clienti.tiscali.it. [94.39.187.56]) by smtp.gmail.com with ESMTPSA id g5sm9203365wrd.0.2017.02.16.06.32.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 16 Feb 2017 06:32:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=iSkXQVPdhCY2wOgbkVgOgB8FvcGd4vFUPTFajGA0PNk=; b=Q0L3ewG1fPsWsHao4caAy9CwhfxXt2aekQKziUca+3oBsI0EGMZpP2nWj8LWK0QtCL ZZn/fmISgC/dkX4k8EgMXS00s5PZOVOi96NARauA6Iz45AGYA3SeB92UMSvxn0X/AdWz rJYu6rMxiGSyGeSCdkzNjPTLdWEx45dT8UShaGwrBuhbQ9aa+fGvaruCwtj74U51yR2X ajfM0OMcFoB0P5a8Fx6y55UWCwebpRr3gO7aBIhjKTI0PWwpA5yIypVEWh6VeYYIjo3e wBQucE9pLhAw+i1UoKxV3dsduBTfzDksnvMvg+4IUjFV3YhL+oge+xcpRkdoC3/mmRWS ENTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=iSkXQVPdhCY2wOgbkVgOgB8FvcGd4vFUPTFajGA0PNk=; b=MXi/nZDS/6ymNHSTpbvpOLdYk4isTIr0kS/PmBbLMu8wotb/C8RdYds4W6qMXVVlhE cn0aPTjaLrBJQCPa1QNg537ymj7qFS2R3gLyiDhxD/7Dn4zITKdAm2e0K+kj/BC5c1cW k1DGUHSzpZv1WcvNzdoAaFBM8JZ2AVtCChiIcli8kUF7Oq4fxGQYTnaHiLtAfUo+WPmU 3qwrzH0VK3LaRT4MkZpDGx59QgONouSadHe2pEjDideN6l4OHYw8OExCTUvvGgHr3vYn zPvidgyuCtbgoOwfWfMZ4PjJa6ygQo9toN+t/XPZIQPk8r9/CJJBM4QkUo5pXgeRy6N+ eMJQ== X-Gm-Message-State: AMke39nBN5YjFMlo8EPUy3wtvM7X8nsmJYZaGNq76KusTc/mZOHGMDWkHNsfezRDX6SzPw== X-Received: by 10.28.129.147 with SMTP id c141mr13482939wmd.12.1487255537456; Thu, 16 Feb 2017 06:32:17 -0800 (PST) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Thu, 16 Feb 2017 15:31:34 +0100 Message-Id: <1487255507-106654-11-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1487255507-106654-1-git-send-email-pbonzini@redhat.com> References: <1487255507-106654-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2a00:1450:400c:c09::242 Subject: [Qemu-devel] [PULL 10/23] hw/char/mcf_uart: QOMify the ColdFire UART X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Thomas Huth Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Thomas Huth Use type_init() etc. to adapt the ColdFire UART to the latest QEMU device conventions. Signed-off-by: Thomas Huth Message-Id: <1485586582-6490-1-git-send-email-huth@tuxfamily.org> Signed-off-by: Paolo Bonzini --- hw/char/mcf_uart.c | 102 +++++++++++++++++++++++++++++++++++++---------= ---- hw/m68k/mcf5208.c | 6 +-- include/hw/m68k/mcf.h | 6 +-- 3 files changed, 81 insertions(+), 33 deletions(-) diff --git a/hw/char/mcf_uart.c b/hw/char/mcf_uart.c index 80c380e..e69672f 100644 --- a/hw/char/mcf_uart.c +++ b/hw/char/mcf_uart.c @@ -7,12 +7,15 @@ */ #include "qemu/osdep.h" #include "hw/hw.h" +#include "hw/sysbus.h" #include "hw/m68k/mcf.h" #include "sysemu/char.h" #include "exec/address-spaces.h" #include "qapi/error.h" =20 typedef struct { + SysBusDevice parent_obj; + MemoryRegion iomem; uint8_t mr[2]; uint8_t sr; @@ -30,6 +33,9 @@ typedef struct { CharBackend chr; } mcf_uart_state; =20 +#define TYPE_MCF_UART "mcf-uart" +#define MCF_UART(obj) OBJECT_CHECK(mcf_uart_state, (obj), TYPE_MCF_UART) + /* UART Status Register bits. */ #define MCF_UART_RxRDY 0x01 #define MCF_UART_FFULL 0x02 @@ -220,8 +226,10 @@ void mcf_uart_write(void *opaque, hwaddr addr, mcf_uart_update(s); } =20 -static void mcf_uart_reset(mcf_uart_state *s) +static void mcf_uart_reset(DeviceState *dev) { + mcf_uart_state *s =3D MCF_UART(dev); + s->fifo_len =3D 0; s->mr[0] =3D 0; s->mr[1] =3D 0; @@ -275,36 +283,80 @@ static void mcf_uart_receive(void *opaque, const uint= 8_t *buf, int size) mcf_uart_push_byte(s, buf[0]); } =20 -void *mcf_uart_init(qemu_irq irq, Chardev *chr) -{ - mcf_uart_state *s; - - s =3D g_malloc0(sizeof(mcf_uart_state)); - s->irq =3D irq; - if (chr) { - qemu_chr_fe_init(&s->chr, chr, &error_abort); - qemu_chr_fe_set_handlers(&s->chr, mcf_uart_can_receive, - mcf_uart_receive, mcf_uart_event, - s, NULL, true); - } - mcf_uart_reset(s); - return s; -} - static const MemoryRegionOps mcf_uart_ops =3D { .read =3D mcf_uart_read, .write =3D mcf_uart_write, .endianness =3D DEVICE_NATIVE_ENDIAN, }; =20 -void mcf_uart_mm_init(MemoryRegion *sysmem, - hwaddr base, - qemu_irq irq, - Chardev *chr) +static void mcf_uart_instance_init(Object *obj) +{ + SysBusDevice *dev =3D SYS_BUS_DEVICE(obj); + mcf_uart_state *s =3D MCF_UART(dev); + + memory_region_init_io(&s->iomem, obj, &mcf_uart_ops, s, "uart", 0x40); + sysbus_init_mmio(dev, &s->iomem); + + sysbus_init_irq(dev, &s->irq); +} + +static void mcf_uart_realize(DeviceState *dev, Error **errp) +{ + mcf_uart_state *s =3D MCF_UART(dev); + + qemu_chr_fe_set_handlers(&s->chr, mcf_uart_can_receive, mcf_uart_recei= ve, + mcf_uart_event, s, NULL, true); +} + +static Property mcf_uart_properties[] =3D { + DEFINE_PROP_CHR("chardev", mcf_uart_state, chr), + DEFINE_PROP_END_OF_LIST(), +}; + +static void mcf_uart_class_init(ObjectClass *oc, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(oc); + + dc->realize =3D mcf_uart_realize; + dc->reset =3D mcf_uart_reset; + dc->props =3D mcf_uart_properties; + set_bit(DEVICE_CATEGORY_INPUT, dc->categories); +} + +static const TypeInfo mcf_uart_info =3D { + .name =3D TYPE_MCF_UART, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(mcf_uart_state), + .instance_init =3D mcf_uart_instance_init, + .class_init =3D mcf_uart_class_init, +}; + +static void mcf_uart_register(void) +{ + type_register_static(&mcf_uart_info); +} + +type_init(mcf_uart_register) + +void *mcf_uart_init(qemu_irq irq, Chardev *chrdrv) +{ + DeviceState *dev; + + dev =3D qdev_create(NULL, TYPE_MCF_UART); + if (chrdrv) { + qdev_prop_set_chr(dev, "chardev", chrdrv); + } + qdev_init_nofail(dev); + + sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, irq); + + return dev; +} + +void mcf_uart_mm_init(hwaddr base, qemu_irq irq, Chardev *chrdrv) { - mcf_uart_state *s; + DeviceState *dev; =20 - s =3D mcf_uart_init(irq, chr); - memory_region_init_io(&s->iomem, NULL, &mcf_uart_ops, s, "uart", 0x40); - memory_region_add_subregion(sysmem, base, &s->iomem); + dev =3D mcf_uart_init(irq, chrdrv); + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base); } diff --git a/hw/m68k/mcf5208.c b/hw/m68k/mcf5208.c index bad1d33..6563518 100644 --- a/hw/m68k/mcf5208.c +++ b/hw/m68k/mcf5208.c @@ -255,9 +255,9 @@ static void mcf5208evb_init(MachineState *machine) /* Internal peripherals. */ pic =3D mcf_intc_init(address_space_mem, 0xfc048000, cpu); =20 - mcf_uart_mm_init(address_space_mem, 0xfc060000, pic[26], serial_hds[0]= ); - mcf_uart_mm_init(address_space_mem, 0xfc064000, pic[27], serial_hds[1]= ); - mcf_uart_mm_init(address_space_mem, 0xfc068000, pic[28], serial_hds[2]= ); + mcf_uart_mm_init(0xfc060000, pic[26], serial_hds[0]); + mcf_uart_mm_init(0xfc064000, pic[27], serial_hds[1]); + mcf_uart_mm_init(0xfc068000, pic[28], serial_hds[2]); =20 mcf5208_sys_init(address_space_mem, pic); =20 diff --git a/include/hw/m68k/mcf.h b/include/hw/m68k/mcf.h index 9a0bcfa..0db49c5 100644 --- a/include/hw/m68k/mcf.h +++ b/include/hw/m68k/mcf.h @@ -4,17 +4,13 @@ =20 #include "target/m68k/cpu-qom.h" =20 -struct MemoryRegion; - /* mcf_uart.c */ uint64_t mcf_uart_read(void *opaque, hwaddr addr, unsigned size); void mcf_uart_write(void *opaque, hwaddr addr, uint64_t val, unsigned size); void *mcf_uart_init(qemu_irq irq, Chardev *chr); -void mcf_uart_mm_init(struct MemoryRegion *sysmem, - hwaddr base, - qemu_irq irq, Chardev *chr); +void mcf_uart_mm_init(hwaddr base, qemu_irq irq, Chardev *chr); =20 /* mcf_intc.c */ qemu_irq *mcf_intc_init(struct MemoryRegion *sysmem, --=20 1.8.3.1