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