From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44654) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ya2Y4-0006N8-Qp for qemu-devel@nongnu.org; Mon, 23 Mar 2015 09:37:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Ya2Y1-0002V8-IQ for qemu-devel@nongnu.org; Mon, 23 Mar 2015 09:37:44 -0400 Received: from e23smtp05.au.ibm.com ([202.81.31.147]:49990) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ya2Y0-0002UM-UR for qemu-devel@nongnu.org; Mon, 23 Mar 2015 09:37:41 -0400 Received: from /spool/local by e23smtp05.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 23 Mar 2015 23:37:38 +1000 From: Bharata B Rao Date: Mon, 23 Mar 2015 19:05:49 +0530 Message-Id: <1427117764-23008-9-git-send-email-bharata@linux.vnet.ibm.com> In-Reply-To: <1427117764-23008-1-git-send-email-bharata@linux.vnet.ibm.com> References: <1427117764-23008-1-git-send-email-bharata@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [Qemu-devel] [RFC PATCH v2 08/23] ppc: Prepare CPU socket/core abstraction List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Bharata B Rao , mdroth@linux.vnet.ibm.com, agraf@suse.de, qemu-ppc@nongnu.org, tyreld@linux.vnet.ibm.com, nfont@linux.vnet.ibm.com, imammedo@redhat.com, afaerber@suse.de, david@gibson.dropbear.id.au Signed-off-by: Bharata B Rao Signed-off-by: Andreas Färber --- hw/ppc/Makefile.objs | 1 + hw/ppc/cpu-core.c | 46 ++++++++++++++++++++++++++++++++++++++++++++ hw/ppc/cpu-socket.c | 47 +++++++++++++++++++++++++++++++++++++++++++++ include/hw/ppc/cpu-core.h | 32 ++++++++++++++++++++++++++++++ include/hw/ppc/cpu-socket.h | 32 ++++++++++++++++++++++++++++++ 5 files changed, 158 insertions(+) create mode 100644 hw/ppc/cpu-core.c create mode 100644 hw/ppc/cpu-socket.c create mode 100644 include/hw/ppc/cpu-core.h create mode 100644 include/hw/ppc/cpu-socket.h diff --git a/hw/ppc/Makefile.objs b/hw/ppc/Makefile.objs index c8ab06e..a35cac5 100644 --- a/hw/ppc/Makefile.objs +++ b/hw/ppc/Makefile.objs @@ -1,5 +1,6 @@ # shared objects obj-y += ppc.o ppc_booke.o +obj-y += cpu-socket.o cpu-core.o # IBM pSeries (sPAPR) obj-$(CONFIG_PSERIES) += spapr.o spapr_vio.o spapr_events.o obj-$(CONFIG_PSERIES) += spapr_hcall.o spapr_iommu.o spapr_rtas.o diff --git a/hw/ppc/cpu-core.c b/hw/ppc/cpu-core.c new file mode 100644 index 0000000..ed0481f --- /dev/null +++ b/hw/ppc/cpu-core.c @@ -0,0 +1,46 @@ +/* + * ppc CPU core abstraction + * + * Copyright (c) 2015 SUSE Linux GmbH + * Copyright (C) 2015 Bharata B Rao + */ + +#include "hw/qdev.h" +#include "hw/ppc/cpu-core.h" + +static int ppc_cpu_core_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 ppc_cpu_core_realize(DeviceState *dev, Error **errp) +{ + object_child_foreach(OBJECT(dev), ppc_cpu_core_realize_child, errp); +} + +static void ppc_cpu_core_class_init(ObjectClass *oc, void *data) +{ + DeviceClass *dc = DEVICE_CLASS(oc); + + dc->realize = ppc_cpu_core_realize; +} + +static const TypeInfo ppc_cpu_core_type_info = { + .name = TYPE_POWERPC_CPU_CORE, + .parent = TYPE_DEVICE, + .class_init = ppc_cpu_core_class_init, +}; + +static void ppc_cpu_core_register_types(void) +{ + type_register_static(&ppc_cpu_core_type_info); +} + +type_init(ppc_cpu_core_register_types) diff --git a/hw/ppc/cpu-socket.c b/hw/ppc/cpu-socket.c new file mode 100644 index 0000000..602a060 --- /dev/null +++ b/hw/ppc/cpu-socket.c @@ -0,0 +1,47 @@ +/* + * PPC CPU socket abstraction + * + * Copyright (c) 2015 SUSE Linux GmbH + * Copyright (C) 2015 Bharata B Rao + */ + +#include "hw/qdev.h" +#include "hw/ppc/cpu-socket.h" +#include "sysemu/cpus.h" + +static int ppc_cpu_socket_realize_child(Object *child, void *opaque) +{ + Error **errp = opaque; + + object_property_set_bool(child, true, "realized", errp); + if (*errp) { + return 1; + } else { + return 0; + } +} + +static void ppc_cpu_socket_realize(DeviceState *dev, Error **errp) +{ + object_child_foreach(OBJECT(dev), ppc_cpu_socket_realize_child, errp); +} + +static void ppc_cpu_socket_class_init(ObjectClass *oc, void *data) +{ + DeviceClass *dc = DEVICE_CLASS(oc); + + dc->realize = ppc_cpu_socket_realize; +} + +static const TypeInfo ppc_cpu_socket_type_info = { + .name = TYPE_POWERPC_CPU_SOCKET, + .parent = TYPE_CPU_SOCKET, + .class_init = ppc_cpu_socket_class_init, +}; + +static void ppc_cpu_socket_register_types(void) +{ + type_register_static(&ppc_cpu_socket_type_info); +} + +type_init(ppc_cpu_socket_register_types) diff --git a/include/hw/ppc/cpu-core.h b/include/hw/ppc/cpu-core.h new file mode 100644 index 0000000..95f1c28 --- /dev/null +++ b/include/hw/ppc/cpu-core.h @@ -0,0 +1,32 @@ +/* + * PowerPC CPU core abstraction + * + * Copyright (c) 2015 SUSE Linux GmbH + * Copyright (C) 2015 Bharata B Rao + */ +#ifndef HW_PPC_CPU_CORE_H +#define HW_PPC_CPU_CORE_H + +#include "hw/qdev.h" +#include "cpu.h" + +#ifdef TARGET_PPC64 +#define TYPE_POWERPC_CPU_CORE "powerpc64-cpu-core" +#elif defined(TARGET_PPCEMB) +#define TYPE_POWERPC_CPU_CORE "embedded-powerpc-cpu-core" +#else +#define TYPE_POWERPC_CPU_CORE "powerpc-cpu-core" +#endif + +#define POWERPC_CPU_CORE(obj) \ + OBJECT_CHECK(PowerPCCPUCore, (obj), TYPE_POWERPC_CPU_CORE) + +typedef struct PowerPCCPUCore { + /*< private >*/ + DeviceState parent_obj; + /*< public >*/ + + PowerPCCPU thread[0]; +} PowerPCCPUCore; + +#endif diff --git a/include/hw/ppc/cpu-socket.h b/include/hw/ppc/cpu-socket.h new file mode 100644 index 0000000..5ae19d0 --- /dev/null +++ b/include/hw/ppc/cpu-socket.h @@ -0,0 +1,32 @@ +/* + * PowerPC CPU socket abstraction + * + * Copyright (c) 2015 SUSE Linux GmbH + * Copyright (C) 2015 Bharata B Rao + */ +#ifndef HW_PPC_CPU_SOCKET_H +#define HW_PPC_CPU_SOCKET_H + +#include "hw/cpu/socket.h" +#include "cpu-core.h" + +#ifdef TARGET_PPC64 +#define TYPE_POWERPC_CPU_SOCKET "powerpc64-cpu-socket" +#elif defined(TARGET_PPCEMB) +#define TYPE_POWERPC_CPU_SOCKET "embedded-powerpc-cpu-socket" +#else +#define TYPE_POWERPC_CPU_SOCKET "powerpc-cpu-socket" +#endif + +#define POWERPC_CPU_SOCKET(obj) \ + OBJECT_CHECK(PowerPCCPUSocket, (obj), TYPE_POWERPC_CPU_SOCKET) + +typedef struct PowerPCCPUSocket { + /*< private >*/ + DeviceState parent_obj; + /*< public >*/ + + PowerPCCPUCore core[0]; +} PowerPCCPUSocket; + +#endif -- 2.1.0