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;
18*e300a5eeSMichael Ellerman struct kvm_cpu_task *task;
197281a8dbSDavid Daney
207281a8dbSDavid Daney struct kvm_regs regs;
217281a8dbSDavid Daney
227281a8dbSDavid Daney u8 is_running;
237281a8dbSDavid Daney u8 paused;
247281a8dbSDavid Daney u8 needs_nmi;
257281a8dbSDavid Daney
267281a8dbSDavid Daney struct kvm_coalesced_mmio_ring *ring;
277281a8dbSDavid Daney };
287281a8dbSDavid Daney
297281a8dbSDavid Daney /*
307281a8dbSDavid Daney * As these are such simple wrappers, let's have them in the header so they'll
317281a8dbSDavid Daney * be cheaper to call:
327281a8dbSDavid Daney */
kvm_cpu__emulate_io(struct kvm_cpu * vcpu,u16 port,void * data,int direction,int size,u32 count)33474b696fSAndreas Herrmann static inline bool kvm_cpu__emulate_io(struct kvm_cpu *vcpu, u16 port, void *data, int direction, int size, u32 count)
347281a8dbSDavid Daney {
35474b696fSAndreas Herrmann return kvm__emulate_io(vcpu, port, data, direction, size, count);
367281a8dbSDavid Daney }
377281a8dbSDavid Daney
kvm_cpu__emulate_mmio(struct kvm_cpu * vcpu,u64 phys_addr,u8 * data,u32 len,u8 is_write)387281a8dbSDavid Daney static inline bool kvm_cpu__emulate_mmio(struct kvm_cpu *vcpu, u64 phys_addr, u8 *data, u32 len, u8 is_write)
397281a8dbSDavid Daney {
407281a8dbSDavid Daney return kvm__emulate_mmio(vcpu, phys_addr, data, len, is_write);
417281a8dbSDavid Daney }
427281a8dbSDavid Daney
437281a8dbSDavid Daney #endif /* KVM__KVM_CPU_ARCH_H */
44