xref: /openbmc/qemu/include/accel/accel-cpu-target.h (revision 98c7362b1efe651327385a25874a73e008c6549e)
1b12a0f85SPhilippe Mathieu-Daudé /*
2b12a0f85SPhilippe Mathieu-Daudé  * Accelerator interface, specializes CPUClass
3b12a0f85SPhilippe Mathieu-Daudé  * This header is used only by target-specific code.
4b12a0f85SPhilippe Mathieu-Daudé  *
5b12a0f85SPhilippe Mathieu-Daudé  * Copyright 2021 SUSE LLC
6b12a0f85SPhilippe Mathieu-Daudé  *
7b12a0f85SPhilippe Mathieu-Daudé  * This work is licensed under the terms of the GNU GPL, version 2 or later.
8b12a0f85SPhilippe Mathieu-Daudé  * See the COPYING file in the top-level directory.
9b12a0f85SPhilippe Mathieu-Daudé  */
10b12a0f85SPhilippe Mathieu-Daudé 
11b12a0f85SPhilippe Mathieu-Daudé #ifndef ACCEL_CPU_TARGET_H
12b12a0f85SPhilippe Mathieu-Daudé #define ACCEL_CPU_TARGET_H
13b12a0f85SPhilippe Mathieu-Daudé 
14b12a0f85SPhilippe Mathieu-Daudé /*
15b12a0f85SPhilippe Mathieu-Daudé  * This header is used to define new accelerator-specific target-specific
16b12a0f85SPhilippe Mathieu-Daudé  * accelerator cpu subclasses.
17b12a0f85SPhilippe Mathieu-Daudé  * It uses CPU_RESOLVING_TYPE, so this is clearly target-specific.
18b12a0f85SPhilippe Mathieu-Daudé  *
19b12a0f85SPhilippe Mathieu-Daudé  * Do not try to use for any other purpose than the implementation of new
20b12a0f85SPhilippe Mathieu-Daudé  * subclasses in target/, or the accel implementation itself in accel/
21b12a0f85SPhilippe Mathieu-Daudé  */
22b12a0f85SPhilippe Mathieu-Daudé 
23*217e7202SPhilippe Mathieu-Daudé #include "qom/object.h"
24*217e7202SPhilippe Mathieu-Daudé #include "cpu.h"
25*217e7202SPhilippe Mathieu-Daudé 
26b12a0f85SPhilippe Mathieu-Daudé #define TYPE_ACCEL_CPU "accel-" CPU_RESOLVING_TYPE
27b12a0f85SPhilippe Mathieu-Daudé #define ACCEL_CPU_NAME(name) (name "-" TYPE_ACCEL_CPU)
28b12a0f85SPhilippe Mathieu-Daudé typedef struct AccelCPUClass AccelCPUClass;
29b12a0f85SPhilippe Mathieu-Daudé DECLARE_CLASS_CHECKERS(AccelCPUClass, ACCEL_CPU, TYPE_ACCEL_CPU)
30b12a0f85SPhilippe Mathieu-Daudé 
31b12a0f85SPhilippe Mathieu-Daudé typedef struct AccelCPUClass {
32b12a0f85SPhilippe Mathieu-Daudé     /*< private >*/
33b12a0f85SPhilippe Mathieu-Daudé     ObjectClass parent_class;
34b12a0f85SPhilippe Mathieu-Daudé     /*< public >*/
35b12a0f85SPhilippe Mathieu-Daudé 
36b12a0f85SPhilippe Mathieu-Daudé     void (*cpu_class_init)(CPUClass *cc);
37b12a0f85SPhilippe Mathieu-Daudé     void (*cpu_instance_init)(CPUState *cpu);
38b12a0f85SPhilippe Mathieu-Daudé     bool (*cpu_target_realize)(CPUState *cpu, Error **errp);
39b12a0f85SPhilippe Mathieu-Daudé } AccelCPUClass;
40b12a0f85SPhilippe Mathieu-Daudé 
41b12a0f85SPhilippe Mathieu-Daudé #endif /* ACCEL_CPU_H */
42