From patchwork Tue Jan 3 00:52:19 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anthony Liguori X-Patchwork-Id: 133943 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [140.186.70.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 45ADCB6FA2 for ; Tue, 3 Jan 2012 12:48:14 +1100 (EST) Received: from localhost ([::1]:55861 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rhsdb-0003Ii-L1 for incoming@patchwork.ozlabs.org; Mon, 02 Jan 2012 19:53:59 -0500 Received: from eggs.gnu.org ([140.186.70.92]:51790) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rhsck-0002B0-Ed for qemu-devel@nongnu.org; Mon, 02 Jan 2012 19:53:07 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Rhsci-0008Mz-Nf for qemu-devel@nongnu.org; Mon, 02 Jan 2012 19:53:06 -0500 Received: from e9.ny.us.ibm.com ([32.97.182.139]:33843) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rhsci-0008Mn-89 for qemu-devel@nongnu.org; Mon, 02 Jan 2012 19:53:04 -0500 Received: from /spool/local by e9.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 2 Jan 2012 19:53:03 -0500 Received: from d01relay05.pok.ibm.com (9.56.227.237) by e9.ny.us.ibm.com (192.168.1.109) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 2 Jan 2012 19:53:02 -0500 Received: from d01av02.pok.ibm.com (d01av02.pok.ibm.com [9.56.224.216]) by d01relay05.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q030r1df263574 for ; Mon, 2 Jan 2012 19:53:01 -0500 Received: from d01av02.pok.ibm.com (loopback [127.0.0.1]) by d01av02.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q030r16r002724 for ; Mon, 2 Jan 2012 22:53:01 -0200 Received: from titi.austin.rr.com (sig-9-65-105-201.mts.ibm.com [9.65.105.201]) by d01av02.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id q030qLps000958; Mon, 2 Jan 2012 22:53:00 -0200 From: Anthony Liguori To: qemu-devel@nongnu.org Date: Mon, 2 Jan 2012 18:52:19 -0600 Message-Id: <1325551939-24749-31-git-send-email-aliguori@us.ibm.com> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1325551939-24749-1-git-send-email-aliguori@us.ibm.com> References: <1325551939-24749-1-git-send-email-aliguori@us.ibm.com> x-cbid: 12010300-7182-0000-0000-0000007ACCD7 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 32.97.182.139 Cc: Paolo Bonzini , Anthony Liguori , Markus Armbruster , =?UTF-8?q?Andreas=20F=C3=A4rber?= Subject: [Qemu-devel] [PATCH 30/30] virtio-s390: convert to QEMU Object Model 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 Signed-off-by: Anthony Liguori --- hw/s390-virtio-bus.c | 91 +++++++++++++++++++++++++++++++++++--------------- 1 files changed, 64 insertions(+), 27 deletions(-) diff --git a/hw/s390-virtio-bus.c b/hw/s390-virtio-bus.c index a047bbf..3bce5e4 100644 --- a/hw/s390-virtio-bus.c +++ b/hw/s390-virtio-bus.c @@ -50,11 +50,19 @@ struct BusInfo s390_virtio_bus_info = { .size = sizeof(VirtIOS390Bus), }; -typedef struct { - DeviceInfo qdev; +typedef struct VirtIOS390DeviceClass +{ + DeviceClass parent_class; int (*init)(VirtIOS390Device *dev); -} VirtIOS390DeviceInfo; +} VirtIOS390DeviceClass; +#define TYPE_VIRTIO_S390_DEVICE "virtio-s390-device" +#define VIRTIO_S390_DEVICE(obj) \ + OBJECT_CHECK(VirtIOS390Device, (obj), TYPE_VIRTIO_S390_DEVICE) +#define VIRTIO_S390_DEVICE_CLASS(klass) \ + OBJECT_CLASS_CHECK(VirtIOS390DeviceClass, (klass), TYPE_VIRTIO_S390_DEVICE) +#define VIRTIO_S390_DEVICE_GET_CLASS(obj) \ + OBJECT_GET_CLASS(VirtIOS390DeviceClass, (obj), TYPE_VIRTIO_S390_DEVICE) static const VirtIOBindings virtio_s390_bindings; @@ -330,12 +338,19 @@ static const VirtIOBindings virtio_s390_bindings = { .get_features = virtio_s390_get_features, }; -static VirtIOS390DeviceInfo s390_virtio_net = { - .init = s390_virtio_net_init, - .qdev.name = "virtio-net-s390", - .qdev.alias = "virtio-net", - .qdev.size = sizeof(VirtIOS390Device), - .qdev.props = (Property[]) { +static void s390_virtio_net_class_init(ObjectClass *klass, void *data) +{ + VirtIOS390DeviceClass *dc = VIRTIO_S390_DEVICE_CLASS(klass); + + dc->init = s390_virtio_net_init; +} + +static DeviceInfo s390_virtio_net = { + .name = "virtio-net-s390", + .alias = "virtio-net", + .size = sizeof(VirtIOS390Device), + .class_init = s390_virtio_net_class_init, + .props = (Property[]) { DEFINE_NIC_PROPERTIES(VirtIOS390Device, nic), DEFINE_PROP_UINT32("x-txtimer", VirtIOS390Device, net.txtimer, TX_TIMER_INTERVAL), @@ -346,24 +361,38 @@ static VirtIOS390DeviceInfo s390_virtio_net = { }, }; -static VirtIOS390DeviceInfo s390_virtio_blk = { - .init = s390_virtio_blk_init, - .qdev.name = "virtio-blk-s390", - .qdev.alias = "virtio-blk", - .qdev.size = sizeof(VirtIOS390Device), - .qdev.props = (Property[]) { +static void s390_virtio_blk_class_init(ObjectClass *klass, void *data) +{ + VirtIOS390DeviceClass *dc = VIRTIO_S390_DEVICE_CLASS(klass); + + dc->init = s390_virtio_blk_init; +} + +static DeviceInfo s390_virtio_blk = { + .name = "virtio-blk-s390", + .alias = "virtio-blk", + .size = sizeof(VirtIOS390Device), + .class_init = s390_virtio_blk_class_init, + .props = (Property[]) { DEFINE_BLOCK_PROPERTIES(VirtIOS390Device, block), DEFINE_PROP_STRING("serial", VirtIOS390Device, block_serial), DEFINE_PROP_END_OF_LIST(), }, }; -static VirtIOS390DeviceInfo s390_virtio_serial = { - .init = s390_virtio_serial_init, - .qdev.name = "virtio-serial-s390", - .qdev.alias = "virtio-serial", - .qdev.size = sizeof(VirtIOS390Device), - .qdev.props = (Property[]) { +static void s390_virtio_serial_class_init(ObjectClass *klass, void *data) +{ + VirtIOS390DeviceClass *dc = VIRTIO_S390_DEVICE_CLASS(klass); + + dc->init = s390_virtio_serial_init; +} + +static DeviceInfo s390_virtio_serial = { + .name = "virtio-serial-s390", + .alias = "virtio-serial", + .size = sizeof(VirtIOS390Device), + .class_init = s390_virtio_serial_class_init, + .props = (Property[]) { DEFINE_PROP_UINT32("max_ports", VirtIOS390Device, serial.max_virtserial_ports, 31), DEFINE_PROP_END_OF_LIST(), @@ -372,23 +401,31 @@ static VirtIOS390DeviceInfo s390_virtio_serial = { static int s390_virtio_busdev_init(DeviceState *dev, DeviceInfo *info) { - VirtIOS390DeviceInfo *_info = (VirtIOS390DeviceInfo *)info; VirtIOS390Device *_dev = (VirtIOS390Device *)dev; + VirtIOS390DeviceClass *_info = VIRTIO_S390_DEVICE_GET_CLASS(dev); return _info->init(_dev); } -static void s390_virtio_bus_register_withprop(VirtIOS390DeviceInfo *info) +static void s390_virtio_bus_register_withprop(DeviceInfo *info) { - info->qdev.init = s390_virtio_busdev_init; - info->qdev.bus_info = &s390_virtio_bus_info; + info->init = s390_virtio_busdev_init; + info->bus_info = &s390_virtio_bus_info; - assert(info->qdev.size >= sizeof(VirtIOS390Device)); - qdev_register(&info->qdev); + assert(info->size >= sizeof(VirtIOS390Device)); + qdev_register_subclass(info, TYPE_VIRTIO_S390_DEVICE); } +static TypeInfo virtio_s390_device_info = { + .name = TYPE_VIRTIO_S390_DEVICE, + .parent = TYPE_DEVICE, + .instance_size = sizeof(VirtIOS390Device), + .abstract = true, +}; + static void s390_virtio_register(void) { + type_register_static(&virtio_s390_device_info); s390_virtio_bus_register_withprop(&s390_virtio_serial); s390_virtio_bus_register_withprop(&s390_virtio_blk); s390_virtio_bus_register_withprop(&s390_virtio_net);