xref: /openbmc/qemu/include/accel/accel-ops.h (revision f96b157ebb93f94cd56ebbc99bc20982b8fd86ef)
1f7a7e7ddSPhilippe Mathieu-Daudé /*
2f7a7e7ddSPhilippe Mathieu-Daudé  * Accelerator handlers
3f7a7e7ddSPhilippe Mathieu-Daudé  *
4f7a7e7ddSPhilippe Mathieu-Daudé  * SPDX-License-Identifier: GPL-2.0-or-later
5f7a7e7ddSPhilippe Mathieu-Daudé  */
6f7a7e7ddSPhilippe Mathieu-Daudé 
7f7a7e7ddSPhilippe Mathieu-Daudé #ifndef ACCEL_OPS_H
8f7a7e7ddSPhilippe Mathieu-Daudé #define ACCEL_OPS_H
9f7a7e7ddSPhilippe Mathieu-Daudé 
10f7a7e7ddSPhilippe Mathieu-Daudé #include "exec/hwaddr.h"
11f7a7e7ddSPhilippe Mathieu-Daudé #include "qemu/accel.h"
12f7a7e7ddSPhilippe Mathieu-Daudé #include "qom/object.h"
13f7a7e7ddSPhilippe Mathieu-Daudé 
14f7a7e7ddSPhilippe Mathieu-Daudé struct AccelState {
15f7a7e7ddSPhilippe Mathieu-Daudé     Object parent_obj;
16f7a7e7ddSPhilippe Mathieu-Daudé };
17f7a7e7ddSPhilippe Mathieu-Daudé 
18f7a7e7ddSPhilippe Mathieu-Daudé struct AccelClass {
19f7a7e7ddSPhilippe Mathieu-Daudé     ObjectClass parent_class;
20f7a7e7ddSPhilippe Mathieu-Daudé 
21f7a7e7ddSPhilippe Mathieu-Daudé     const char *name;
22f7a7e7ddSPhilippe Mathieu-Daudé     /* Cached by accel_init_ops_interfaces() when created */
23f7a7e7ddSPhilippe Mathieu-Daudé     AccelOpsClass *ops;
24f7a7e7ddSPhilippe Mathieu-Daudé 
25f7a7e7ddSPhilippe Mathieu-Daudé     int (*init_machine)(AccelState *as, MachineState *ms);
26f7a7e7ddSPhilippe Mathieu-Daudé     bool (*cpu_common_realize)(CPUState *cpu, Error **errp);
27f7a7e7ddSPhilippe Mathieu-Daudé     void (*cpu_common_unrealize)(CPUState *cpu);
28*1861993fSPhilippe Mathieu-Daudé     /* get_stats: Append statistics to @buf */
29*1861993fSPhilippe Mathieu-Daudé     void (*get_stats)(AccelState *as, GString *buf);
30f7a7e7ddSPhilippe Mathieu-Daudé 
31f7a7e7ddSPhilippe Mathieu-Daudé     /* system related hooks */
32f7a7e7ddSPhilippe Mathieu-Daudé     void (*setup_post)(AccelState *as);
33f7a7e7ddSPhilippe Mathieu-Daudé     void (*pre_resume_vm)(AccelState *as, bool step_pending);
34f7a7e7ddSPhilippe Mathieu-Daudé     bool (*has_memory)(AccelState *accel, AddressSpace *as,
35f7a7e7ddSPhilippe Mathieu-Daudé                        hwaddr start_addr, hwaddr size);
36f7a7e7ddSPhilippe Mathieu-Daudé 
37f7a7e7ddSPhilippe Mathieu-Daudé     /* gdbstub related hooks */
38f7a7e7ddSPhilippe Mathieu-Daudé     int (*gdbstub_supported_sstep_flags)(AccelState *as);
39f7a7e7ddSPhilippe Mathieu-Daudé 
40f7a7e7ddSPhilippe Mathieu-Daudé     bool *allowed;
41f7a7e7ddSPhilippe Mathieu-Daudé     /*
42f7a7e7ddSPhilippe Mathieu-Daudé      * Array of global properties that would be applied when specific
43f7a7e7ddSPhilippe Mathieu-Daudé      * accelerator is chosen. It works like MachineClass.compat_props
44f7a7e7ddSPhilippe Mathieu-Daudé      * but it's for accelerators not machines. Accelerator-provided
45f7a7e7ddSPhilippe Mathieu-Daudé      * global properties may be overridden by machine-type
46f7a7e7ddSPhilippe Mathieu-Daudé      * compat_props or user-provided global properties.
47f7a7e7ddSPhilippe Mathieu-Daudé      */
48f7a7e7ddSPhilippe Mathieu-Daudé     GPtrArray *compat_props;
49f7a7e7ddSPhilippe Mathieu-Daudé };
50f7a7e7ddSPhilippe Mathieu-Daudé 
51f7a7e7ddSPhilippe Mathieu-Daudé #endif /* ACCEL_OPS_H */
52