1 /* 2 * QEMU KVM stub 3 * 4 * Copyright Red Hat, Inc. 2010 5 * 6 * Author: Paolo Bonzini <pbonzini@redhat.com> 7 * 8 * This work is licensed under the terms of the GNU GPL, version 2 or later. 9 * See the COPYING file in the top-level directory. 10 * 11 */ 12 13 #include "qemu/osdep.h" 14 #include "cpu.h" 15 #include "sysemu/kvm.h" 16 17 #ifndef CONFIG_USER_ONLY 18 #include "hw/pci/msi.h" 19 #endif 20 21 KVMState *kvm_state; 22 bool kvm_kernel_irqchip; 23 bool kvm_async_interrupts_allowed; 24 bool kvm_eventfds_allowed; 25 bool kvm_irqfds_allowed; 26 bool kvm_resamplefds_allowed; 27 bool kvm_msi_via_irqfd_allowed; 28 bool kvm_gsi_routing_allowed; 29 bool kvm_gsi_direct_mapping; 30 bool kvm_allowed; 31 bool kvm_readonly_mem_allowed; 32 bool kvm_ioeventfd_any_length_allowed; 33 bool kvm_msi_use_devid; 34 35 void kvm_flush_coalesced_mmio_buffer(void) 36 { 37 } 38 39 void kvm_cpu_synchronize_state(CPUState *cpu) 40 { 41 } 42 43 bool kvm_has_sync_mmu(void) 44 { 45 return false; 46 } 47 48 int kvm_has_many_ioeventfds(void) 49 { 50 return 0; 51 } 52 53 int kvm_update_guest_debug(CPUState *cpu, unsigned long reinject_trap) 54 { 55 return -ENOSYS; 56 } 57 58 int kvm_insert_breakpoint(CPUState *cpu, target_ulong addr, 59 target_ulong len, int type) 60 { 61 return -EINVAL; 62 } 63 64 int kvm_remove_breakpoint(CPUState *cpu, target_ulong addr, 65 target_ulong len, int type) 66 { 67 return -EINVAL; 68 } 69 70 void kvm_remove_all_breakpoints(CPUState *cpu) 71 { 72 } 73 74 int kvm_on_sigbus_vcpu(CPUState *cpu, int code, void *addr) 75 { 76 return 1; 77 } 78 79 int kvm_on_sigbus(int code, void *addr) 80 { 81 return 1; 82 } 83 84 #ifndef CONFIG_USER_ONLY 85 int kvm_irqchip_add_msi_route(KVMState *s, int vector, PCIDevice *dev) 86 { 87 return -ENOSYS; 88 } 89 90 void kvm_init_irq_routing(KVMState *s) 91 { 92 } 93 94 void kvm_irqchip_release_virq(KVMState *s, int virq) 95 { 96 } 97 98 int kvm_irqchip_update_msi_route(KVMState *s, int virq, MSIMessage msg, 99 PCIDevice *dev) 100 { 101 return -ENOSYS; 102 } 103 104 void kvm_irqchip_commit_routes(KVMState *s) 105 { 106 } 107 108 void kvm_irqchip_add_change_notifier(Notifier *n) 109 { 110 } 111 112 void kvm_irqchip_remove_change_notifier(Notifier *n) 113 { 114 } 115 116 void kvm_irqchip_change_notify(void) 117 { 118 } 119 120 int kvm_irqchip_add_adapter_route(KVMState *s, AdapterInfo *adapter) 121 { 122 return -ENOSYS; 123 } 124 125 int kvm_irqchip_add_irqfd_notifier_gsi(KVMState *s, EventNotifier *n, 126 EventNotifier *rn, int virq) 127 { 128 return -ENOSYS; 129 } 130 131 int kvm_irqchip_remove_irqfd_notifier_gsi(KVMState *s, EventNotifier *n, 132 int virq) 133 { 134 return -ENOSYS; 135 } 136 137 bool kvm_has_free_slot(MachineState *ms) 138 { 139 return false; 140 } 141 142 void kvm_init_cpu_signals(CPUState *cpu) 143 { 144 abort(); 145 } 146 147 bool kvm_arm_supports_user_irq(void) 148 { 149 return false; 150 } 151 #endif 152