Abstract 3 core types for i386: common core, Intel Core (P-core) and Intel atom (E-core). This is in preparation for creating the hybrid topology from the CLI. Signed-off-by: Zhao Liu <zhao1.liu@xxxxxxxxx> --- target/i386/core.c | 56 +++++++++++++++++++++++++++++++++++++++++ target/i386/core.h | 53 ++++++++++++++++++++++++++++++++++++++ target/i386/meson.build | 1 + 3 files changed, 110 insertions(+) create mode 100644 target/i386/core.c create mode 100644 target/i386/core.h diff --git a/target/i386/core.c b/target/i386/core.c new file mode 100644 index 000000000000..d76186a6a070 --- /dev/null +++ b/target/i386/core.c @@ -0,0 +1,56 @@ +/* + * x86 CPU core + * + * Copyright (C) 2024 Intel Corporation. + * + * Author: Zhao Liu <zhao1.liu@xxxxxxxxx> + * + * 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 "qemu/osdep.h" +#include "core.h" + +static void x86_common_core_class_init(ObjectClass *oc, void *data) +{ + X86CPUCoreClass *cc = X86_CPU_CORE_CLASS(oc); + + cc->core_type = COMMON_CORE; +} + +static void x86_intel_atom_class_init(ObjectClass *oc, void *data) +{ + X86CPUCoreClass *cc = X86_CPU_CORE_CLASS(oc); + + cc->core_type = INTEL_ATOM; +} + +static void x86_intel_core_class_init(ObjectClass *oc, void *data) +{ + X86CPUCoreClass *cc = X86_CPU_CORE_CLASS(oc); + + cc->core_type = INTEL_CORE; +} + +static const TypeInfo x86_cpu_core_infos[] = { + { + .name = TYPE_X86_CPU_CORE, + .parent = TYPE_CPU_CORE, + .class_size = sizeof(X86CPUCoreClass), + .class_init = x86_common_core_class_init, + .instance_size = sizeof(X86CPUCore), + }, + { + .parent = TYPE_X86_CPU_CORE, + .name = X86_CPU_CORE_TYPE_NAME("intel-atom"), + .class_init = x86_intel_atom_class_init, + }, + { + .parent = TYPE_X86_CPU_CORE, + .name = X86_CPU_CORE_TYPE_NAME("intel-core"), + .class_init = x86_intel_core_class_init, + }, +}; + +DEFINE_TYPES(x86_cpu_core_infos) diff --git a/target/i386/core.h b/target/i386/core.h new file mode 100644 index 000000000000..b942153b2c0d --- /dev/null +++ b/target/i386/core.h @@ -0,0 +1,53 @@ +/* + * x86 CPU core header + * + * Copyright (C) 2024 Intel Corporation. + * + * Author: Zhao Liu <zhao1.liu@xxxxxxxxx> + * + * 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/core.h" +#include "hw/cpu/cpu-topology.h" +#include "qom/object.h" + +#ifndef I386_CORE_H +#define I386_CORE_H + +#ifdef TARGET_X86_64 +#define TYPE_X86_PREFIX "x86-" +#else +#define TYPE_X86_PREFIX "i386-" +#endif + +#define TYPE_X86_CPU_CORE TYPE_X86_PREFIX "core" + +OBJECT_DECLARE_TYPE(X86CPUCore, X86CPUCoreClass, X86_CPU_CORE) + +typedef enum { + COMMON_CORE = 0, + INTEL_ATOM, + INTEL_CORE, +} X86CoreType; + +struct X86CPUCoreClass { + /*< private >*/ + CPUTopoClass parent_class; + + /*< public >*/ + DeviceRealize parent_realize; + X86CoreType core_type; +}; + +struct X86CPUCore { + /*< private >*/ + CPUCore parent_obj; + + /*< public >*/ +}; + +#define X86_CPU_CORE_TYPE_NAME(core_type_str) (TYPE_X86_PREFIX core_type_str) + +#endif /* I386_CORE_H */ diff --git a/target/i386/meson.build b/target/i386/meson.build index 075117989b9d..80a32526d98b 100644 --- a/target/i386/meson.build +++ b/target/i386/meson.build @@ -18,6 +18,7 @@ i386_system_ss.add(files( 'arch_memory_mapping.c', 'machine.c', 'monitor.c', + 'core.c', 'cpu-apic.c', 'cpu-sysemu.c', )) -- 2.34.1