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