|
1 /* |
|
2 * QEMU KVM support |
|
3 * |
|
4 * Copyright IBM, Corp. 2008 |
|
5 * |
|
6 * Authors: |
|
7 * Anthony Liguori <aliguori@us.ibm.com> |
|
8 * |
|
9 * This work is licensed under the terms of the GNU GPL, version 2 or later. |
|
10 * See the COPYING file in the top-level directory. |
|
11 * |
|
12 */ |
|
13 |
|
14 #ifndef QEMU_KVM_H |
|
15 #define QEMU_KVM_H |
|
16 |
|
17 #include "config.h" |
|
18 |
|
19 #ifdef CONFIG_KVM |
|
20 extern int kvm_allowed; |
|
21 |
|
22 #define kvm_enabled() (kvm_allowed) |
|
23 #else |
|
24 #define kvm_enabled() (0) |
|
25 #endif |
|
26 |
|
27 struct kvm_run; |
|
28 |
|
29 /* external API */ |
|
30 |
|
31 int kvm_init(int smp_cpus); |
|
32 |
|
33 int kvm_init_vcpu(CPUState *env); |
|
34 int kvm_sync_vcpus(void); |
|
35 |
|
36 int kvm_cpu_exec(CPUState *env); |
|
37 |
|
38 void kvm_set_phys_mem(target_phys_addr_t start_addr, |
|
39 ram_addr_t size, |
|
40 ram_addr_t phys_offset); |
|
41 |
|
42 void kvm_physical_sync_dirty_bitmap(target_phys_addr_t start_addr, target_phys_addr_t end_addr); |
|
43 |
|
44 int kvm_log_start(target_phys_addr_t phys_addr, target_phys_addr_t len); |
|
45 int kvm_log_stop(target_phys_addr_t phys_addr, target_phys_addr_t len); |
|
46 |
|
47 int kvm_has_sync_mmu(void); |
|
48 |
|
49 int kvm_coalesce_mmio_region(target_phys_addr_t start, ram_addr_t size); |
|
50 int kvm_uncoalesce_mmio_region(target_phys_addr_t start, ram_addr_t size); |
|
51 |
|
52 /* internal API */ |
|
53 |
|
54 struct KVMState; |
|
55 typedef struct KVMState KVMState; |
|
56 |
|
57 int kvm_ioctl(KVMState *s, int type, ...); |
|
58 |
|
59 int kvm_vm_ioctl(KVMState *s, int type, ...); |
|
60 |
|
61 int kvm_vcpu_ioctl(CPUState *env, int type, ...); |
|
62 |
|
63 /* Arch specific hooks */ |
|
64 |
|
65 int kvm_arch_post_run(CPUState *env, struct kvm_run *run); |
|
66 |
|
67 int kvm_arch_handle_exit(CPUState *env, struct kvm_run *run); |
|
68 |
|
69 int kvm_arch_pre_run(CPUState *env, struct kvm_run *run); |
|
70 |
|
71 int kvm_arch_get_registers(CPUState *env); |
|
72 |
|
73 int kvm_arch_put_registers(CPUState *env); |
|
74 |
|
75 int kvm_arch_init(KVMState *s, int smp_cpus); |
|
76 |
|
77 int kvm_arch_init_vcpu(CPUState *env); |
|
78 |
|
79 #endif |