On Mon, Mar 23, 2015 at 07:05:49PM +0530, Bharata B Rao wrote: Again, this needs a commit message explaining why the new abstraction is valuable.
> Signed-off-by: Bharata B Rao <bhar...@linux.vnet.ibm.com> > Signed-off-by: Andreas Färber <afaer...@suse.de> > --- > 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 <bhar...@linux.vnet.ibm.com> > + */ > + > +#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 <bhar...@linux.vnet.ibm.com> > + */ > + > +#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 <bhar...@linux.vnet.ibm.com> > + */ > +#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 <bhar...@linux.vnet.ibm.com> > + */ > +#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 -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson
pgpk4ihnbIkw6.pgp
Description: PGP signature