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_destroy_vcpu(CPUState *cpu) 36 { 37 } 38 39 int kvm_init_vcpu(CPUState *cpu) 40 { 41 return -ENOSYS; 42 } 43 44 void kvm_flush_coalesced_mmio_buffer(void) 45 { 46 } 47 48 void kvm_cpu_synchronize_state(CPUState *cpu) 49 { 50 } 51 52 void kvm_cpu_synchronize_post_reset(CPUState *cpu) 53 { 54 } 55 56 void kvm_cpu_synchronize_post_init(CPUState *cpu) 57 { 58 } 59 60 int kvm_cpu_exec(CPUState *cpu) 61 { 62 abort(); 63 } 64 65 bool kvm_has_sync_mmu(void) 66 { 67 return false; 68 } 69 70 int kvm_has_many_ioeventfds(void) 71 { 72 return 0; 73 } 74 75 int kvm_update_guest_debug(CPUState *cpu, unsigned long reinject_trap) 76 { 77 return -ENOSYS; 78 } 79 80 int kvm_insert_breakpoint(CPUState *cpu, target_ulong addr, 81 target_ulong len, int type) 82 { 83 return -EINVAL; 84 } 85 86 int kvm_remove_breakpoint(CPUState *cpu, target_ulong addr, 87 target_ulong len, int type) 88 { 89 return -EINVAL; 90 } 91 92 void kvm_remove_all_breakpoints(CPUState *cpu) 93 { 94 } 95 96 int kvm_on_sigbus_vcpu(CPUState *cpu, int code, void *addr) 97 { 98 return 1; 99 } 100 101 int kvm_on_sigbus(int code, void *addr) 102 { 103 return 1; 104 } 105 106 bool kvm_memcrypt_enabled(void) 107 { 108 return false; 109 } 110 111 int kvm_memcrypt_encrypt_data(uint8_t *ptr, uint64_t len) 112 { 113 return 1; 114 } 115 116 #ifndef CONFIG_USER_ONLY 117 int kvm_irqchip_add_msi_route(KVMState *s, int vector, PCIDevice *dev) 118 { 119 return -ENOSYS; 120 } 121 122 void kvm_init_irq_routing(KVMState *s) 123 { 124 } 125 126 void kvm_irqchip_release_virq(KVMState *s, int virq) 127 { 128 } 129 130 int kvm_irqchip_update_msi_route(KVMState *s, int virq, MSIMessage msg, 131 PCIDevice *dev) 132 { 133 return -ENOSYS; 134 } 135 136 void kvm_irqchip_commit_routes(KVMState *s) 137 { 138 } 139 140 void kvm_irqchip_add_change_notifier(Notifier *n) 141 { 142 } 143 144 void kvm_irqchip_remove_change_notifier(Notifier *n) 145 { 146 } 147 148 void kvm_irqchip_change_notify(void) 149 { 150 } 151 152 int kvm_irqchip_add_adapter_route(KVMState *s, AdapterInfo *adapter) 153 { 154 return -ENOSYS; 155 } 156 157 int kvm_irqchip_add_irqfd_notifier_gsi(KVMState *s, EventNotifier *n, 158 EventNotifier *rn, int virq) 159 { 160 return -ENOSYS; 161 } 162 163 int kvm_irqchip_remove_irqfd_notifier_gsi(KVMState *s, EventNotifier *n, 164 int virq) 165 { 166 return -ENOSYS; 167 } 168 169 bool kvm_has_free_slot(MachineState *ms) 170 { 171 return false; 172 } 173 174 void kvm_init_cpu_signals(CPUState *cpu) 175 { 176 abort(); 177 } 178 179 bool kvm_arm_supports_user_irq(void) 180 { 181 return false; 182 } 183 #endif 184