1
2
3
4
5
6
7
8
9
10
11#ifndef QEMU_KVM_I386_H
12#define QEMU_KVM_I386_H
13
14#include "sysemu/kvm.h"
15
16#define kvm_apic_in_kernel() (kvm_irqchip_in_kernel())
17
18#ifdef CONFIG_KVM
19
20#define kvm_pit_in_kernel() \
21 (kvm_irqchip_in_kernel() && !kvm_irqchip_is_split())
22#define kvm_pic_in_kernel() \
23 (kvm_irqchip_in_kernel() && !kvm_irqchip_is_split())
24#define kvm_ioapic_in_kernel() \
25 (kvm_irqchip_in_kernel() && !kvm_irqchip_is_split())
26
27#else
28
29#define kvm_pit_in_kernel() 0
30#define kvm_pic_in_kernel() 0
31#define kvm_ioapic_in_kernel() 0
32
33#endif
34
35bool kvm_allows_irq0_override(void);
36bool kvm_has_smm(void);
37bool kvm_has_adjust_clock_stable(void);
38void kvm_synchronize_all_tsc(void);
39void kvm_arch_reset_vcpu(X86CPU *cs);
40void kvm_arch_do_init_vcpu(X86CPU *cs);
41
42int kvm_device_pci_assign(KVMState *s, PCIHostDeviceAddress *dev_addr,
43 uint32_t flags, uint32_t *dev_id);
44int kvm_device_pci_deassign(KVMState *s, uint32_t dev_id);
45
46int kvm_device_intx_assign(KVMState *s, uint32_t dev_id,
47 bool use_host_msi, uint32_t guest_irq);
48int kvm_device_intx_set_mask(KVMState *s, uint32_t dev_id, bool masked);
49int kvm_device_intx_deassign(KVMState *s, uint32_t dev_id, bool use_host_msi);
50
51int kvm_device_msi_assign(KVMState *s, uint32_t dev_id, int virq);
52int kvm_device_msi_deassign(KVMState *s, uint32_t dev_id);
53
54bool kvm_device_msix_supported(KVMState *s);
55int kvm_device_msix_init_vectors(KVMState *s, uint32_t dev_id,
56 uint32_t nr_vectors);
57int kvm_device_msix_set_vector(KVMState *s, uint32_t dev_id, uint32_t vector,
58 int virq);
59int kvm_device_msix_assign(KVMState *s, uint32_t dev_id);
60int kvm_device_msix_deassign(KVMState *s, uint32_t dev_id);
61
62void kvm_put_apicbase(X86CPU *cpu, uint64_t value);
63
64bool kvm_enable_x2apic(void);
65bool kvm_has_x2apic_api(void);
66
67bool kvm_hv_vpindex_settable(void);
68#endif
69