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