17281a8dbSDavid Daney #ifndef KVM__KVM_CPU_ARCH_H 27281a8dbSDavid Daney #define KVM__KVM_CPU_ARCH_H 37281a8dbSDavid Daney 47281a8dbSDavid Daney #include <linux/kvm.h> /* for struct kvm_regs */ 57281a8dbSDavid Daney #include "kvm/kvm.h" /* for kvm__emulate_{mm}io() */ 67281a8dbSDavid Daney #include <pthread.h> 77281a8dbSDavid Daney 87281a8dbSDavid Daney struct kvm; 97281a8dbSDavid Daney 107281a8dbSDavid Daney struct kvm_cpu { 117281a8dbSDavid Daney pthread_t thread; /* VCPU thread */ 127281a8dbSDavid Daney 137281a8dbSDavid Daney unsigned long cpu_id; 147281a8dbSDavid Daney 157281a8dbSDavid Daney struct kvm *kvm; /* parent KVM */ 167281a8dbSDavid Daney int vcpu_fd; /* For VCPU ioctls() */ 177281a8dbSDavid Daney struct kvm_run *kvm_run; 187281a8dbSDavid Daney 197281a8dbSDavid Daney struct kvm_regs regs; 207281a8dbSDavid Daney 217281a8dbSDavid Daney u8 is_running; 227281a8dbSDavid Daney u8 paused; 237281a8dbSDavid Daney u8 needs_nmi; 247281a8dbSDavid Daney 257281a8dbSDavid Daney struct kvm_coalesced_mmio_ring *ring; 267281a8dbSDavid Daney }; 277281a8dbSDavid Daney 287281a8dbSDavid Daney /* 297281a8dbSDavid Daney * As these are such simple wrappers, let's have them in the header so they'll 307281a8dbSDavid Daney * be cheaper to call: 317281a8dbSDavid Daney */ 32*474b696fSAndreas Herrmann static inline bool kvm_cpu__emulate_io(struct kvm_cpu *vcpu, u16 port, void *data, int direction, int size, u32 count) 337281a8dbSDavid Daney { 34*474b696fSAndreas Herrmann return kvm__emulate_io(vcpu, port, data, direction, size, count); 357281a8dbSDavid Daney } 367281a8dbSDavid Daney 377281a8dbSDavid Daney static inline bool kvm_cpu__emulate_mmio(struct kvm_cpu *vcpu, u64 phys_addr, u8 *data, u32 len, u8 is_write) 387281a8dbSDavid Daney { 397281a8dbSDavid Daney return kvm__emulate_mmio(vcpu, phys_addr, data, len, is_write); 407281a8dbSDavid Daney } 417281a8dbSDavid Daney 427281a8dbSDavid Daney #endif /* KVM__KVM_CPU_ARCH_H */ 43