xref: /kvmtool/x86/include/kvm/kvm-cpu-arch.h (revision 17edd536d51f5bb04af6eda28daa1b6355180303)
1af7b0868SMatt Evans #ifndef KVM__KVM_CPU_ARCH_H
2af7b0868SMatt Evans #define KVM__KVM_CPU_ARCH_H
3af7b0868SMatt Evans 
4af7b0868SMatt Evans /* Architecture-specific kvm_cpu definitions. */
5af7b0868SMatt Evans 
6af7b0868SMatt Evans #include <linux/kvm.h>	/* for struct kvm_regs */
7*17edd536SMatt Evans #include "kvm/kvm.h"	/* for kvm__emulate_{mm}io() */
8*17edd536SMatt Evans #include <stdbool.h>
9af7b0868SMatt Evans #include <pthread.h>
10af7b0868SMatt Evans 
11af7b0868SMatt Evans struct kvm;
12af7b0868SMatt Evans 
13af7b0868SMatt Evans struct kvm_cpu {
14af7b0868SMatt Evans 	pthread_t		thread;		/* VCPU thread */
15af7b0868SMatt Evans 
16af7b0868SMatt Evans 	unsigned long		cpu_id;
17af7b0868SMatt Evans 
18af7b0868SMatt Evans 	struct kvm		*kvm;		/* parent KVM */
19af7b0868SMatt Evans 	int			vcpu_fd;	/* For VCPU ioctls() */
20af7b0868SMatt Evans 	struct kvm_run		*kvm_run;
21af7b0868SMatt Evans 
22af7b0868SMatt Evans 	struct kvm_regs		regs;
23af7b0868SMatt Evans 	struct kvm_sregs	sregs;
24af7b0868SMatt Evans 	struct kvm_fpu		fpu;
25af7b0868SMatt Evans 
26af7b0868SMatt Evans 	struct kvm_msrs		*msrs;		/* dynamically allocated */
27af7b0868SMatt Evans 
28af7b0868SMatt Evans 	u8			is_running;
29af7b0868SMatt Evans 	u8			paused;
304b1c6f6eSSasha Levin 	u8			needs_nmi;
31af7b0868SMatt Evans 
32af7b0868SMatt Evans 	struct kvm_coalesced_mmio_ring	*ring;
33af7b0868SMatt Evans };
34af7b0868SMatt Evans 
35*17edd536SMatt Evans /*
36*17edd536SMatt Evans  * As these are such simple wrappers, let's have them in the header so they'll
37*17edd536SMatt Evans  * be cheaper to call:
38*17edd536SMatt Evans  */
39*17edd536SMatt Evans static inline bool kvm_cpu__emulate_io(struct kvm *kvm, u16 port, void *data, int direction, int size, u32 count)
40*17edd536SMatt Evans {
41*17edd536SMatt Evans 	return kvm__emulate_io(kvm, port, data, direction, size, count);
42*17edd536SMatt Evans }
43*17edd536SMatt Evans 
44*17edd536SMatt Evans static inline bool kvm_cpu__emulate_mmio(struct kvm *kvm, u64 phys_addr, u8 *data, u32 len, u8 is_write)
45*17edd536SMatt Evans {
46*17edd536SMatt Evans 	return kvm__emulate_mmio(kvm, phys_addr, data, len, is_write);
47*17edd536SMatt Evans }
48*17edd536SMatt Evans 
49af7b0868SMatt Evans #endif /* KVM__KVM_CPU_ARCH_H */
50