On 1/28/21 10:28 AM, Claudio Fontana wrote: > add a new optional interface to CPUClass, > which allows accelerators to extend the CPUClass > with additional accelerator-specific initializations. > > Add the field before tcg_ops, and mark tcg_ops as > needing to be last in the struct until we rework this > further in a later patch. > > Signed-off-by: Claudio Fontana <cfont...@suse.de> > --- > include/hw/core/accel-cpu.h | 35 +++++++++++++++++++++++++++++ > include/hw/core/cpu.h | 1 + > accel/accel-common.c | 44 +++++++++++++++++++++++++++++++++++++ > MAINTAINERS | 1 + > 4 files changed, 81 insertions(+) > create mode 100644 include/hw/core/accel-cpu.h > > diff --git a/include/hw/core/accel-cpu.h b/include/hw/core/accel-cpu.h > new file mode 100644 > index 0000000000..246b3e2fcb > --- /dev/null > +++ b/include/hw/core/accel-cpu.h > @@ -0,0 +1,35 @@ > +/* > + * Accelerator interface, specializes CPUClass > + * > + * Copyright 2020 SUSE LLC
2020-2021 ;) > + * > + * 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 ACCEL_CPU_H > +#define ACCEL_CPU_H > + > +/* > + * these defines cannot be in cpu.h, because we are using > + * CPU_RESOLVING_TYPE here. > + * Use this header to define your accelerator-specific > + * cpu-specific accelerator interfaces. > + */ > + > +#define TYPE_ACCEL_CPU "accel-" CPU_RESOLVING_TYPE > +#define ACCEL_CPU_NAME(name) (name "-" TYPE_ACCEL_CPU) > +typedef struct AccelCPUClass AccelCPUClass; > +DECLARE_CLASS_CHECKERS(AccelCPUClass, ACCEL_CPU, TYPE_ACCEL_CPU) > + > +typedef struct AccelCPUClass { > + /*< private >*/ > + ObjectClass parent_class; > + /*< public >*/ > + > + void (*cpu_class_init)(CPUClass *cc); > + void (*cpu_instance_init)(CPUState *cpu); > + void (*cpu_realizefn)(CPUState *cpu, Error **errp); If we want callers to check errp, better have the prototype return a boolean. > +} AccelCPUClass;