From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33089) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aXidt-0001Yk-Sv for qemu-devel@nongnu.org; Mon, 22 Feb 2016 00:02:44 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aXidq-0004lq-MG for qemu-devel@nongnu.org; Mon, 22 Feb 2016 00:02:41 -0500 Received: from e23smtp03.au.ibm.com ([202.81.31.145]:55687) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aXidq-0004lV-5Y for qemu-devel@nongnu.org; Mon, 22 Feb 2016 00:02:38 -0500 Received: from localhost by e23smtp03.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 22 Feb 2016 15:02:36 +1000 Received: from d23relay08.au.ibm.com (d23relay08.au.ibm.com [9.185.71.33]) by d23dlp03.au.ibm.com (Postfix) with ESMTP id 158F63578057 for ; Mon, 22 Feb 2016 16:02:30 +1100 (EST) Received: from d23av03.au.ibm.com (d23av03.au.ibm.com [9.190.234.97]) by d23relay08.au.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id u1M52M7A47054850 for ; Mon, 22 Feb 2016 16:02:30 +1100 Received: from d23av03.au.ibm.com (localhost [127.0.0.1]) by d23av03.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id u1M51vZO014845 for ; Mon, 22 Feb 2016 16:01:57 +1100 From: Bharata B Rao Date: Mon, 22 Feb 2016 10:31:20 +0530 Message-Id: <1456117285-22273-4-git-send-email-bharata@linux.vnet.ibm.com> In-Reply-To: <1456117285-22273-1-git-send-email-bharata@linux.vnet.ibm.com> References: <1456117285-22273-1-git-send-email-bharata@linux.vnet.ibm.com> Subject: [Qemu-devel] [RFC PATCH v0 3/8] cpu: CPU package abstract device List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: ehabkost@redhat.com, aik@ozlabs.ru, Bharata B Rao , agraf@suse.de, armbru@redhat.com, pbonzini@redhat.com, imammedo@redhat.com, afaerber@suse.de, david@gibson.dropbear.id.au A minimal abstract device that target machines can create sub-types of to define their own cpu-package devices. Provides a realize routine that walks the child objects and realizes them iteratively. Hence cpu-package interface expects the target implementations to have a hierarchical setup for their CPU objects. Signed-off-by: Bharata B Rao --- hw/cpu/Makefile.objs | 1 + hw/cpu/package.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++ include/hw/cpu/package.h | 27 ++++++++++++++++++++ 3 files changed, 94 insertions(+) create mode 100644 hw/cpu/package.c create mode 100644 include/hw/cpu/package.h diff --git a/hw/cpu/Makefile.objs b/hw/cpu/Makefile.objs index 0954a18..f540826 100644 --- a/hw/cpu/Makefile.objs +++ b/hw/cpu/Makefile.objs @@ -2,4 +2,5 @@ obj-$(CONFIG_ARM11MPCORE) += arm11mpcore.o obj-$(CONFIG_REALVIEW) += realview_mpcore.o obj-$(CONFIG_A9MPCORE) += a9mpcore.o obj-$(CONFIG_A15MPCORE) += a15mpcore.o +obj-y += package.o diff --git a/hw/cpu/package.c b/hw/cpu/package.c new file mode 100644 index 0000000..259dbfa --- /dev/null +++ b/hw/cpu/package.c @@ -0,0 +1,66 @@ +/* + * CPU package device + * + * Copyright (C) 2016 Bharata B Rao + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ +#include "hw/cpu/package.h" +#include "qom/object_interfaces.h" + +Object *cpu_package_create_object(const char *typename, uint32_t index, + Error **errp) +{ + char *id; + Object *obj; + + id = g_strdup_printf("" TYPE_CPU_PACKAGE "[%"PRIu32"]", index); + obj = object_new(typename); + object_property_add_child(qdev_get_machine(), id, obj, errp); + g_free(id); + + if (*errp) { + return NULL; + } else { + return obj; + } +} + +static int cpu_package_realize_child(Object *child, void *opaque) +{ + Error **errp = opaque; + + object_property_set_bool(child, true, "realized", errp); + if (*errp) { + return 1; + } + return 0; +} + +static void cpu_package_realize(DeviceState *dev, Error **errp) +{ + object_child_foreach(OBJECT(dev), cpu_package_realize_child, errp); +} + +static void cpu_package_class_init(ObjectClass *oc, void *data) +{ + DeviceClass *dc = DEVICE_CLASS(oc); + + dc->realize = cpu_package_realize; +} + +static const TypeInfo cpu_package_info = { + .name = TYPE_CPU_PACKAGE, + .parent = TYPE_DEVICE, + .abstract = true, + .instance_size = sizeof(CPUPackage), + .class_init = cpu_package_class_init, +}; + +static void cpu_package_register_types(void) +{ + type_register_static(&cpu_package_info); +} + +type_init(cpu_package_register_types) diff --git a/include/hw/cpu/package.h b/include/hw/cpu/package.h new file mode 100644 index 0000000..0579a42 --- /dev/null +++ b/include/hw/cpu/package.h @@ -0,0 +1,27 @@ +/* + * CPU package device + * + * Copyright (C) 2016 Bharata B Rao + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ +#ifndef HW_CPU_PACKAGE_H +#define HW_CPU_PACKAGE_H + +#include "hw/qdev.h" + +#define TYPE_CPU_PACKAGE "cpu-package" +#define CPU_PACKAGE(obj) \ + OBJECT_CHECK(CPUPackage, (obj), TYPE_CPU_PACKAGE) + +typedef struct CPUPackage { + /* private */ + DeviceState parent_obj; + + /* public */ +} CPUPackage; + +Object *cpu_package_create_object(const char *typename, uint32_t index, + Error **errp); +#endif -- 2.1.0