From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51807) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WCvjO-0004nA-42 for qemu-devel@nongnu.org; Mon, 10 Feb 2014 13:37:39 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WCvjC-0005ss-DK for qemu-devel@nongnu.org; Mon, 10 Feb 2014 13:37:22 -0500 Received: from cantor2.suse.de ([195.135.220.15]:47143 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WCvjB-0005p7-Lr for qemu-devel@nongnu.org; Mon, 10 Feb 2014 13:37:10 -0500 Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 4EFDCAC5B for ; Mon, 10 Feb 2014 18:37:09 +0000 (UTC) From: =?UTF-8?q?Andreas=20F=C3=A4rber?= Date: Mon, 10 Feb 2014 19:36:46 +0100 Message-Id: <1392057426-31990-30-git-send-email-afaerber@suse.de> In-Reply-To: <1392057426-31990-1-git-send-email-afaerber@suse.de> References: <1392057426-31990-1-git-send-email-afaerber@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PULL 29/48] ipack: Convert to QOM realize List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Andreas=20F=C3=A4rber?= Acked-by: Alberto Garcia Signed-off-by: Andreas F=C3=A4rber --- hw/char/ipack.c | 41 ++++++++++++++++++++++------------------- hw/char/ipack.h | 6 ++++-- hw/char/ipoctal232.c | 8 +++----- 3 files changed, 29 insertions(+), 26 deletions(-) diff --git a/hw/char/ipack.c b/hw/char/ipack.c index b7e45be..15cef7b 100644 --- a/hw/char/ipack.c +++ b/hw/char/ipack.c @@ -34,37 +34,39 @@ void ipack_bus_new_inplace(IPackBus *bus, size_t bus_= size, bus->set_irq =3D handler; } =20 -static int ipack_device_dev_init(DeviceState *qdev) +static void ipack_device_realize(DeviceState *dev, Error **errp) { - IPackBus *bus =3D IPACK_BUS(qdev_get_parent_bus(qdev)); - IPackDevice *dev =3D IPACK_DEVICE(qdev); + IPackDevice *idev =3D IPACK_DEVICE(dev); + IPackBus *bus =3D IPACK_BUS(qdev_get_parent_bus(dev)); IPackDeviceClass *k =3D IPACK_DEVICE_GET_CLASS(dev); =20 - if (dev->slot < 0) { - dev->slot =3D bus->free_slot; + if (idev->slot < 0) { + idev->slot =3D bus->free_slot; } - if (dev->slot >=3D bus->n_slots) { - return -1; + if (idev->slot >=3D bus->n_slots) { + error_setg(errp, "Only %" PRIu8 " slots available.", bus->n_slot= s); + return; } - bus->free_slot =3D dev->slot + 1; + bus->free_slot =3D idev->slot + 1; =20 - dev->irq =3D qemu_allocate_irqs(bus->set_irq, dev, 2); + idev->irq =3D qemu_allocate_irqs(bus->set_irq, idev, 2); =20 - return k->init(dev); + k->realize(dev, errp); } =20 -static int ipack_device_dev_exit(DeviceState *qdev) +static void ipack_device_unrealize(DeviceState *dev, Error **errp) { - IPackDevice *dev =3D IPACK_DEVICE(qdev); + IPackDevice *idev =3D IPACK_DEVICE(dev); IPackDeviceClass *k =3D IPACK_DEVICE_GET_CLASS(dev); + Error *err =3D NULL; =20 - if (k->exit) { - k->exit(dev); + if (k->unrealize) { + k->unrealize(dev, &err); + error_propagate(errp, err); + return; } =20 - qemu_free_irqs(dev->irq); - - return 0; + qemu_free_irqs(idev->irq); } =20 static Property ipack_device_props[] =3D { @@ -75,10 +77,11 @@ static Property ipack_device_props[] =3D { static void ipack_device_class_init(ObjectClass *klass, void *data) { DeviceClass *k =3D DEVICE_CLASS(klass); + set_bit(DEVICE_CATEGORY_INPUT, k->categories); k->bus_type =3D TYPE_IPACK_BUS; - k->init =3D ipack_device_dev_init; - k->exit =3D ipack_device_dev_exit; + k->realize =3D ipack_device_realize; + k->unrealize =3D ipack_device_unrealize; k->props =3D ipack_device_props; } =20 diff --git a/hw/char/ipack.h b/hw/char/ipack.h index f8dc0f2..b62066f 100644 --- a/hw/char/ipack.h +++ b/hw/char/ipack.h @@ -38,10 +38,12 @@ typedef struct IPackDeviceClass IPackDeviceClass; OBJECT_GET_CLASS(IPackDeviceClass, (obj), TYPE_IPACK_DEVICE) =20 struct IPackDeviceClass { + /*< private >*/ DeviceClass parent_class; + /*< public >*/ =20 - int (*init)(IPackDevice *dev); - int (*exit)(IPackDevice *dev); + DeviceRealize realize; + DeviceUnrealize unrealize; =20 uint16_t (*io_read)(IPackDevice *dev, uint8_t addr); void (*io_write)(IPackDevice *dev, uint8_t addr, uint16_t val); diff --git a/hw/char/ipoctal232.c b/hw/char/ipoctal232.c index 88e2cca..b33cfff 100644 --- a/hw/char/ipoctal232.c +++ b/hw/char/ipoctal232.c @@ -534,9 +534,9 @@ static void hostdev_event(void *opaque, int event) } } =20 -static int ipoctal_init(IPackDevice *ip) +static void ipoctal_realize(DeviceState *dev, Error **errp) { - IPOctalState *s =3D IPOCTAL(ip); + IPOctalState *s =3D IPOCTAL(dev); unsigned i; =20 for (i =3D 0; i < N_CHANNELS; i++) { @@ -552,8 +552,6 @@ static int ipoctal_init(IPackDevice *ip) DPRINTF("Could not redirect channel %u, no chardev set\n", i= ); } } - - return 0; } =20 static Property ipoctal_properties[] =3D { @@ -573,7 +571,7 @@ static void ipoctal_class_init(ObjectClass *klass, vo= id *data) DeviceClass *dc =3D DEVICE_CLASS(klass); IPackDeviceClass *ic =3D IPACK_DEVICE_CLASS(klass); =20 - ic->init =3D ipoctal_init; + ic->realize =3D ipoctal_realize; ic->io_read =3D io_read; ic->io_write =3D io_write; ic->id_read =3D id_read; --=20 1.8.4.5