xref: /kvmtool/include/kvm/kvm.h (revision ae1fae34a8e9b97d1e999fb0b82813d282376e11)
1*ae1fae34SPekka Enberg #ifndef KVM__KVM_H
2*ae1fae34SPekka Enberg #define KVM__KVM_H
3*ae1fae34SPekka Enberg 
4*ae1fae34SPekka Enberg #include <linux/kvm.h>	/* for struct kvm_regs */
5*ae1fae34SPekka Enberg 
6*ae1fae34SPekka Enberg #include <stdbool.h>
7*ae1fae34SPekka Enberg #include <stdint.h>
8*ae1fae34SPekka Enberg 
9*ae1fae34SPekka Enberg struct kvm {
10*ae1fae34SPekka Enberg 	int			sys_fd;		/* For system ioctls(), i.e. /dev/kvm */
11*ae1fae34SPekka Enberg 	int			vm_fd;		/* For VM ioctls() */
12*ae1fae34SPekka Enberg 	int			vcpu_fd;	/* For VCPU ioctls() */
13*ae1fae34SPekka Enberg 	struct kvm_run		*kvm_run;
14*ae1fae34SPekka Enberg 
15*ae1fae34SPekka Enberg 	uint64_t		ram_size;
16*ae1fae34SPekka Enberg 	void			*ram_start;
17*ae1fae34SPekka Enberg 
18*ae1fae34SPekka Enberg 	struct kvm_regs		regs;
19*ae1fae34SPekka Enberg };
20*ae1fae34SPekka Enberg 
21*ae1fae34SPekka Enberg struct kvm *kvm__init(void);
22*ae1fae34SPekka Enberg void kvm__enable_singlestep(struct kvm *self);
23*ae1fae34SPekka Enberg uint32_t kvm__load_kernel(struct kvm *kvm, const char *kernel_filename);
24*ae1fae34SPekka Enberg void kvm__reset_vcpu(struct kvm *self, uint64_t rip);
25*ae1fae34SPekka Enberg void kvm__run(struct kvm *self);
26*ae1fae34SPekka Enberg void kvm__emulate_io(struct kvm *self, uint16_t port, void *data, int direction, int size, uint32_t count);
27*ae1fae34SPekka Enberg 
28*ae1fae34SPekka Enberg /*
29*ae1fae34SPekka Enberg  * Debugging
30*ae1fae34SPekka Enberg  */
31*ae1fae34SPekka Enberg void kvm__show_code(struct kvm *self);
32*ae1fae34SPekka Enberg void kvm__show_registers(struct kvm *self);
33*ae1fae34SPekka Enberg 
34*ae1fae34SPekka Enberg extern const char *kvm_exit_reasons[];
35*ae1fae34SPekka Enberg 
36*ae1fae34SPekka Enberg #endif /* KVM__KVM_H */
37