2 * Accelerator OPS, used for cpus.c module
4 * Copyright 2021 SUSE LLC
6 * This work is licensed under the terms of the GNU GPL, version 2 or later.
7 * See the COPYING file in the top-level directory.
13 #include "exec/cpu-common.h"
14 #include "qom/object.h"
16 #define ACCEL_OPS_SUFFIX "-ops"
17 #define TYPE_ACCEL_OPS "accel" ACCEL_OPS_SUFFIX
18 #define ACCEL_OPS_NAME(name) (name "-" TYPE_ACCEL_OPS)
20 typedef struct AccelOpsClass AccelOpsClass
;
21 DECLARE_CLASS_CHECKERS(AccelOpsClass
, ACCEL_OPS
, TYPE_ACCEL_OPS
)
23 /* cpus.c operations interface */
24 struct AccelOpsClass
{
26 ObjectClass parent_class
;
29 /* initialization function called when accel is chosen */
30 void (*ops_init
)(AccelOpsClass
*ops
);
32 bool (*cpus_are_resettable
)(void);
33 void (*cpu_reset_hold
)(CPUState
*cpu
);
35 void (*create_vcpu_thread
)(CPUState
*cpu
); /* MANDATORY NON-NULL */
36 void (*kick_vcpu_thread
)(CPUState
*cpu
);
37 bool (*cpu_thread_is_idle
)(CPUState
*cpu
);
39 void (*synchronize_post_reset
)(CPUState
*cpu
);
40 void (*synchronize_post_init
)(CPUState
*cpu
);
41 void (*synchronize_state
)(CPUState
*cpu
);
42 void (*synchronize_pre_loadvm
)(CPUState
*cpu
);
43 void (*synchronize_pre_resume
)(bool step_pending
);
45 void (*handle_interrupt
)(CPUState
*cpu
, int mask
);
47 int64_t (*get_virtual_clock
)(void);
48 int64_t (*get_elapsed_ticks
)(void);
51 bool (*supports_guest_debug
)(void);
52 int (*update_guest_debug
)(CPUState
*cpu
);
53 int (*insert_breakpoint
)(CPUState
*cpu
, int type
, vaddr addr
, vaddr len
);
54 int (*remove_breakpoint
)(CPUState
*cpu
, int type
, vaddr addr
, vaddr len
);
55 void (*remove_all_breakpoints
)(CPUState
*cpu
);
58 #endif /* ACCEL_OPS_H */