xref: /kvmtool/include/kvm/kvm-cpu.h (revision 5ee154d136a6a45e49f9ba52563ccf7b4b64e8ed)
15c3d55faSPekka Enberg #ifndef KVM__KVM_CPU_H
25c3d55faSPekka Enberg #define KVM__KVM_CPU_H
35c3d55faSPekka Enberg 
45c3d55faSPekka Enberg #include <linux/kvm.h>	/* for struct kvm_regs */
55c3d55faSPekka Enberg 
6*5ee154d1SPekka Enberg #include <pthread.h>
75c3d55faSPekka Enberg #include <stdint.h>
85c3d55faSPekka Enberg 
95c3d55faSPekka Enberg struct kvm;
105c3d55faSPekka Enberg 
115c3d55faSPekka Enberg struct kvm_cpu {
12*5ee154d1SPekka Enberg 	pthread_t		thread;		/* VCPU thread */
13*5ee154d1SPekka Enberg 
14*5ee154d1SPekka Enberg 	unsigned long		cpu_id;
15*5ee154d1SPekka Enberg 
165c3d55faSPekka Enberg 	struct kvm		*kvm;		/* parent KVM */
175c3d55faSPekka Enberg 	int			vcpu_fd;	/* For VCPU ioctls() */
185c3d55faSPekka Enberg 	struct kvm_run		*kvm_run;
195c3d55faSPekka Enberg 
205c3d55faSPekka Enberg 	struct kvm_regs		regs;
215c3d55faSPekka Enberg 	struct kvm_sregs	sregs;
225c3d55faSPekka Enberg 	struct kvm_fpu		fpu;
235c3d55faSPekka Enberg 
245c3d55faSPekka Enberg 	struct kvm_msrs		*msrs;		/* dynamically allocated */
255c3d55faSPekka Enberg };
265c3d55faSPekka Enberg 
27*5ee154d1SPekka Enberg struct kvm_cpu *kvm_cpu__init(struct kvm *kvm, unsigned long cpu_id);
285c3d55faSPekka Enberg void kvm_cpu__delete(struct kvm_cpu *self);
295c3d55faSPekka Enberg void kvm_cpu__reset_vcpu(struct kvm_cpu *self);
305c3d55faSPekka Enberg void kvm_cpu__setup_cpuid(struct kvm_cpu *self);
315c3d55faSPekka Enberg void kvm_cpu__enable_singlestep(struct kvm_cpu *self);
325c3d55faSPekka Enberg void kvm_cpu__run(struct kvm_cpu *self);
3365bab644SPekka Enberg int kvm_cpu__start(struct kvm_cpu *cpu);
345c3d55faSPekka Enberg 
355c3d55faSPekka Enberg void kvm_cpu__show_code(struct kvm_cpu *self);
365c3d55faSPekka Enberg void kvm_cpu__show_registers(struct kvm_cpu *self);
375c3d55faSPekka Enberg void kvm_cpu__show_page_tables(struct kvm_cpu *self);
385c3d55faSPekka Enberg 
395c3d55faSPekka Enberg #endif /* KVM__KVM_CPU_H */
40