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 "qemu-common.h" 15 #include "cpu.h" 16 #include "sysemu/kvm.h" 17 18 #ifndef CONFIG_USER_ONLY 19 #include "hw/pci/msi.h" 20 #endif 21 22 KVMState *kvm_state; 23 bool kvm_kernel_irqchip; 24 bool kvm_async_interrupts_allowed; 25 bool kvm_eventfds_allowed; 26 bool kvm_irqfds_allowed; 27 bool kvm_resamplefds_allowed; 28 bool kvm_msi_via_irqfd_allowed; 29 bool kvm_gsi_routing_allowed; 30 bool kvm_gsi_direct_mapping; 31 bool kvm_allowed; 32 bool kvm_readonly_mem_allowed; 33 bool kvm_ioeventfd_any_length_allowed; 34 bool kvm_msi_use_devid; 35 36 int kvm_destroy_vcpu(CPUState *cpu) 37 { 38 return -ENOSYS; 39 } 40 41 int kvm_init_vcpu(CPUState *cpu) 42 { 43 return -ENOSYS; 44 } 45 46 void kvm_flush_coalesced_mmio_buffer(void) 47 { 48 } 49 50 void kvm_cpu_synchronize_state(CPUState *cpu) 51 { 52 } 53 54 void kvm_cpu_synchronize_post_reset(CPUState *cpu) 55 { 56 } 57 58 void kvm_cpu_synchronize_post_init(CPUState *cpu) 59 { 60 } 61 62 int kvm_cpu_exec(CPUState *cpu) 63 { 64 abort(); 65 } 66 67 bool kvm_has_sync_mmu(void) 68 { 69 return false; 70 } 71 72 int kvm_has_many_ioeventfds(void) 73 { 74 return 0; 75 } 76 77 int kvm_update_guest_debug(CPUState *cpu, unsigned long reinject_trap) 78 { 79 return -ENOSYS; 80 } 81 82 int kvm_insert_breakpoint(CPUState *cpu, target_ulong addr, 83 target_ulong len, int type) 84 { 85 return -EINVAL; 86 } 87 88 int kvm_remove_breakpoint(CPUState *cpu, target_ulong addr, 89 target_ulong len, int type) 90 { 91 return -EINVAL; 92 } 93 94 void kvm_remove_all_breakpoints(CPUState *cpu) 95 { 96 } 97 98 int kvm_on_sigbus_vcpu(CPUState *cpu, int code, void *addr) 99 { 100 return 1; 101 } 102 103 int kvm_on_sigbus(int code, void *addr) 104 { 105 return 1; 106 } 107 108 bool kvm_memcrypt_enabled(void) 109 { 110 return false; 111 } 112 113 int kvm_memcrypt_encrypt_data(uint8_t *ptr, uint64_t len) 114 { 115 return 1; 116 } 117 118 #ifndef CONFIG_USER_ONLY 119 int kvm_irqchip_add_msi_route(KVMState *s, int vector, PCIDevice *dev) 120 { 121 return -ENOSYS; 122 } 123 124 void kvm_init_irq_routing(KVMState *s) 125 { 126 } 127 128 void kvm_irqchip_release_virq(KVMState *s, int virq) 129 { 130 } 131 132 int kvm_irqchip_update_msi_route(KVMState *s, int virq, MSIMessage msg, 133 PCIDevice *dev) 134 { 135 return -ENOSYS; 136 } 137 138 void kvm_irqchip_commit_routes(KVMState *s) 139 { 140 } 141 142 int kvm_irqchip_add_adapter_route(KVMState *s, AdapterInfo *adapter) 143 { 144 return -ENOSYS; 145 } 146 147 int kvm_irqchip_add_irqfd_notifier_gsi(KVMState *s, EventNotifier *n, 148 EventNotifier *rn, int virq) 149 { 150 return -ENOSYS; 151 } 152 153 int kvm_irqchip_remove_irqfd_notifier_gsi(KVMState *s, EventNotifier *n, 154 int virq) 155 { 156 return -ENOSYS; 157 } 158 159 bool kvm_has_free_slot(MachineState *ms) 160 { 161 return false; 162 } 163 164 void kvm_init_cpu_signals(CPUState *cpu) 165 { 166 abort(); 167 } 168 169 bool kvm_arm_supports_user_irq(void) 170 { 171 return false; 172 } 173 #endif 174