1af7b0868SMatt Evans #ifndef KVM__KVM_CPU_ARCH_H 2af7b0868SMatt Evans #define KVM__KVM_CPU_ARCH_H 3af7b0868SMatt Evans 4af7b0868SMatt Evans /* Architecture-specific kvm_cpu definitions. */ 5af7b0868SMatt Evans 6af7b0868SMatt Evans #include <linux/kvm.h> /* for struct kvm_regs */ 7*17edd536SMatt Evans #include "kvm/kvm.h" /* for kvm__emulate_{mm}io() */ 8*17edd536SMatt Evans #include <stdbool.h> 9af7b0868SMatt Evans #include <pthread.h> 10af7b0868SMatt Evans 11af7b0868SMatt Evans struct kvm; 12af7b0868SMatt Evans 13af7b0868SMatt Evans struct kvm_cpu { 14af7b0868SMatt Evans pthread_t thread; /* VCPU thread */ 15af7b0868SMatt Evans 16af7b0868SMatt Evans unsigned long cpu_id; 17af7b0868SMatt Evans 18af7b0868SMatt Evans struct kvm *kvm; /* parent KVM */ 19af7b0868SMatt Evans int vcpu_fd; /* For VCPU ioctls() */ 20af7b0868SMatt Evans struct kvm_run *kvm_run; 21af7b0868SMatt Evans 22af7b0868SMatt Evans struct kvm_regs regs; 23af7b0868SMatt Evans struct kvm_sregs sregs; 24af7b0868SMatt Evans struct kvm_fpu fpu; 25af7b0868SMatt Evans 26af7b0868SMatt Evans struct kvm_msrs *msrs; /* dynamically allocated */ 27af7b0868SMatt Evans 28af7b0868SMatt Evans u8 is_running; 29af7b0868SMatt Evans u8 paused; 304b1c6f6eSSasha Levin u8 needs_nmi; 31af7b0868SMatt Evans 32af7b0868SMatt Evans struct kvm_coalesced_mmio_ring *ring; 33af7b0868SMatt Evans }; 34af7b0868SMatt Evans 35*17edd536SMatt Evans /* 36*17edd536SMatt Evans * As these are such simple wrappers, let's have them in the header so they'll 37*17edd536SMatt Evans * be cheaper to call: 38*17edd536SMatt Evans */ 39*17edd536SMatt Evans static inline bool kvm_cpu__emulate_io(struct kvm *kvm, u16 port, void *data, int direction, int size, u32 count) 40*17edd536SMatt Evans { 41*17edd536SMatt Evans return kvm__emulate_io(kvm, port, data, direction, size, count); 42*17edd536SMatt Evans } 43*17edd536SMatt Evans 44*17edd536SMatt Evans static inline bool kvm_cpu__emulate_mmio(struct kvm *kvm, u64 phys_addr, u8 *data, u32 len, u8 is_write) 45*17edd536SMatt Evans { 46*17edd536SMatt Evans return kvm__emulate_mmio(kvm, phys_addr, data, len, is_write); 47*17edd536SMatt Evans } 48*17edd536SMatt Evans 49af7b0868SMatt Evans #endif /* KVM__KVM_CPU_ARCH_H */ 50