xref: /openbmc/qemu/include/qemu/accel.h (revision 59851868)
1940e43aaSClaudio Fontana /* QEMU accelerator interfaces
2940e43aaSClaudio Fontana  *
3940e43aaSClaudio Fontana  * Copyright (c) 2014 Red Hat Inc
4940e43aaSClaudio Fontana  *
5940e43aaSClaudio Fontana  * Permission is hereby granted, free of charge, to any person obtaining a copy
6940e43aaSClaudio Fontana  * of this software and associated documentation files (the "Software"), to deal
7940e43aaSClaudio Fontana  * in the Software without restriction, including without limitation the rights
8940e43aaSClaudio Fontana  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9940e43aaSClaudio Fontana  * copies of the Software, and to permit persons to whom the Software is
10940e43aaSClaudio Fontana  * furnished to do so, subject to the following conditions:
11940e43aaSClaudio Fontana  *
12940e43aaSClaudio Fontana  * The above copyright notice and this permission notice shall be included in
13940e43aaSClaudio Fontana  * all copies or substantial portions of the Software.
14940e43aaSClaudio Fontana  *
15940e43aaSClaudio Fontana  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16940e43aaSClaudio Fontana  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17940e43aaSClaudio Fontana  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18940e43aaSClaudio Fontana  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19940e43aaSClaudio Fontana  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20940e43aaSClaudio Fontana  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21940e43aaSClaudio Fontana  * THE SOFTWARE.
22940e43aaSClaudio Fontana  */
23940e43aaSClaudio Fontana #ifndef QEMU_ACCEL_H
24940e43aaSClaudio Fontana #define QEMU_ACCEL_H
25940e43aaSClaudio Fontana 
26940e43aaSClaudio Fontana #include "qom/object.h"
27940e43aaSClaudio Fontana #include "exec/hwaddr.h"
28940e43aaSClaudio Fontana 
293d277871SPhilippe Mathieu-Daudé struct AccelState {
30940e43aaSClaudio Fontana     /*< private >*/
31940e43aaSClaudio Fontana     Object parent_obj;
323d277871SPhilippe Mathieu-Daudé };
33940e43aaSClaudio Fontana 
34940e43aaSClaudio Fontana typedef struct AccelClass {
35940e43aaSClaudio Fontana     /*< private >*/
36940e43aaSClaudio Fontana     ObjectClass parent_class;
37940e43aaSClaudio Fontana     /*< public >*/
38940e43aaSClaudio Fontana 
39940e43aaSClaudio Fontana     const char *name;
40940e43aaSClaudio Fontana     int (*init_machine)(MachineState *ms);
41940e43aaSClaudio Fontana #ifndef CONFIG_USER_ONLY
42940e43aaSClaudio Fontana     void (*setup_post)(MachineState *ms, AccelState *accel);
43940e43aaSClaudio Fontana     bool (*has_memory)(MachineState *ms, AddressSpace *as,
44940e43aaSClaudio Fontana                        hwaddr start_addr, hwaddr size);
45940e43aaSClaudio Fontana #endif
46*59851868SPhilippe Mathieu-Daudé     bool (*cpu_common_realize)(CPUState *cpu, Error **errp);
47*59851868SPhilippe Mathieu-Daudé     void (*cpu_common_unrealize)(CPUState *cpu);
483b7a9388SAlex Bennée 
493b7a9388SAlex Bennée     /* gdbstub related hooks */
503b7a9388SAlex Bennée     int (*gdbstub_supported_sstep_flags)(void);
513b7a9388SAlex Bennée 
52940e43aaSClaudio Fontana     bool *allowed;
53940e43aaSClaudio Fontana     /*
54940e43aaSClaudio Fontana      * Array of global properties that would be applied when specific
55940e43aaSClaudio Fontana      * accelerator is chosen. It works like MachineClass.compat_props
56940e43aaSClaudio Fontana      * but it's for accelerators not machines. Accelerator-provided
57940e43aaSClaudio Fontana      * global properties may be overridden by machine-type
58940e43aaSClaudio Fontana      * compat_props or user-provided global properties.
59940e43aaSClaudio Fontana      */
60940e43aaSClaudio Fontana     GPtrArray *compat_props;
61940e43aaSClaudio Fontana } AccelClass;
62940e43aaSClaudio Fontana 
63940e43aaSClaudio Fontana #define TYPE_ACCEL "accel"
64940e43aaSClaudio Fontana 
65940e43aaSClaudio Fontana #define ACCEL_CLASS_SUFFIX  "-" TYPE_ACCEL
66940e43aaSClaudio Fontana #define ACCEL_CLASS_NAME(a) (a ACCEL_CLASS_SUFFIX)
67940e43aaSClaudio Fontana 
68940e43aaSClaudio Fontana #define ACCEL_CLASS(klass) \
69940e43aaSClaudio Fontana     OBJECT_CLASS_CHECK(AccelClass, (klass), TYPE_ACCEL)
70940e43aaSClaudio Fontana #define ACCEL(obj) \
71940e43aaSClaudio Fontana     OBJECT_CHECK(AccelState, (obj), TYPE_ACCEL)
72940e43aaSClaudio Fontana #define ACCEL_GET_CLASS(obj) \
73940e43aaSClaudio Fontana     OBJECT_GET_CLASS(AccelClass, (obj), TYPE_ACCEL)
74940e43aaSClaudio Fontana 
75940e43aaSClaudio Fontana AccelClass *accel_find(const char *opt_name);
76940e43aaSClaudio Fontana AccelState *current_accel(void);
7755bd445cSAlexander Graf const char *current_accel_name(void);
78940e43aaSClaudio Fontana 
79b86f59c7SClaudio Fontana void accel_init_interfaces(AccelClass *ac);
80b86f59c7SClaudio Fontana 
81940e43aaSClaudio Fontana #ifndef CONFIG_USER_ONLY
82940e43aaSClaudio Fontana int accel_init_machine(AccelState *accel, MachineState *ms);
83940e43aaSClaudio Fontana 
84940e43aaSClaudio Fontana /* Called just before os_setup_post (ie just before drop OS privs) */
85940e43aaSClaudio Fontana void accel_setup_post(MachineState *ms);
86940e43aaSClaudio Fontana #endif /* !CONFIG_USER_ONLY */
87940e43aaSClaudio Fontana 
88bb883fd6SClaudio Fontana /**
89bb883fd6SClaudio Fontana  * accel_cpu_instance_init:
90bb883fd6SClaudio Fontana  * @cpu: The CPU that needs to do accel-specific object initializations.
91bb883fd6SClaudio Fontana  */
92bb883fd6SClaudio Fontana void accel_cpu_instance_init(CPUState *cpu);
93bb883fd6SClaudio Fontana 
94bb883fd6SClaudio Fontana /**
95bd684b2fSPhilippe Mathieu-Daudé  * accel_cpu_common_realize:
96bb883fd6SClaudio Fontana  * @cpu: The CPU that needs to call accel-specific cpu realization.
97bb883fd6SClaudio Fontana  * @errp: currently unused.
98bb883fd6SClaudio Fontana  */
99bd684b2fSPhilippe Mathieu-Daudé bool accel_cpu_common_realize(CPUState *cpu, Error **errp);
100bb883fd6SClaudio Fontana 
1013b7a9388SAlex Bennée /**
1021aa1d830SPhilippe Mathieu-Daudé  * accel_cpu_common_unrealize:
1031aa1d830SPhilippe Mathieu-Daudé  * @cpu: The CPU that needs to call accel-specific cpu unrealization.
1041aa1d830SPhilippe Mathieu-Daudé  */
1051aa1d830SPhilippe Mathieu-Daudé void accel_cpu_common_unrealize(CPUState *cpu);
1061aa1d830SPhilippe Mathieu-Daudé 
1071aa1d830SPhilippe Mathieu-Daudé /**
1083b7a9388SAlex Bennée  * accel_supported_gdbstub_sstep_flags:
1093b7a9388SAlex Bennée  *
1103b7a9388SAlex Bennée  * Returns the supported single step modes for the configured
1113b7a9388SAlex Bennée  * accelerator.
1123b7a9388SAlex Bennée  */
1133b7a9388SAlex Bennée int accel_supported_gdbstub_sstep_flags(void);
1143b7a9388SAlex Bennée 
115940e43aaSClaudio Fontana #endif /* QEMU_ACCEL_H */
116