xref: /kvmtool/kvm.c (revision 6c7d85141bb6c79085ac355efe6d7212e2738cf7)
1b8f6afcdSPekka Enberg #include "kvm/cpu.h"
2b8f6afcdSPekka Enberg 
3*6c7d8514SPekka Enberg #include <linux/kvm.h>
4b8f6afcdSPekka Enberg #include <stdlib.h>
5b8f6afcdSPekka Enberg #include <fcntl.h>
6b8f6afcdSPekka Enberg 
7b8f6afcdSPekka Enberg static void die(const char *s)
8b8f6afcdSPekka Enberg {
9b8f6afcdSPekka Enberg 	perror(s);
10b8f6afcdSPekka Enberg 	exit(1);
11b8f6afcdSPekka Enberg }
12b8f6afcdSPekka Enberg 
13b8f6afcdSPekka Enberg static void cpu__reset(struct cpu *self)
14b8f6afcdSPekka Enberg {
15b8f6afcdSPekka Enberg 	self->regs.eip		= 0x000fff0UL;
16b8f6afcdSPekka Enberg 	self->regs.eflags	= 0x0000002UL;
17b8f6afcdSPekka Enberg }
18b8f6afcdSPekka Enberg 
19b8f6afcdSPekka Enberg static struct cpu *cpu__new(void)
20b8f6afcdSPekka Enberg {
21b8f6afcdSPekka Enberg 	return calloc(1, sizeof(struct cpu));
22b8f6afcdSPekka Enberg }
23b8f6afcdSPekka Enberg 
24b8f6afcdSPekka Enberg int main(int argc, char *argv[])
25b8f6afcdSPekka Enberg {
26b8f6afcdSPekka Enberg 	struct cpu *cpu;
27*6c7d8514SPekka Enberg 	int fd, ret;
28b8f6afcdSPekka Enberg 
29b8f6afcdSPekka Enberg 	fd = open("/dev/kvm", O_RDWR);
30b8f6afcdSPekka Enberg 	if (fd < 0)
31b8f6afcdSPekka Enberg 		die("open");
32b8f6afcdSPekka Enberg 
33*6c7d8514SPekka Enberg 	ret = ioctl(fd, KVM_GET_API_VERSION, 0);
34*6c7d8514SPekka Enberg 	if (ret != KVM_API_VERSION)
35*6c7d8514SPekka Enberg 		die("ioctl");
36*6c7d8514SPekka Enberg 
37b8f6afcdSPekka Enberg 	cpu = cpu__new();
38b8f6afcdSPekka Enberg 
39b8f6afcdSPekka Enberg 	cpu__reset(cpu);
40b8f6afcdSPekka Enberg 
41b8f6afcdSPekka Enberg 	return 0;
42b8f6afcdSPekka Enberg }
43