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