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