xref: /kvmtool/powerpc/include/kvm/kvm-cpu-arch.h (revision 63e158a0a0a05551e8e983826bb26a2c0a78ef4b)
1*63e158a0SMatt Evans /*
2*63e158a0SMatt Evans  * PPC64 cpu-specific definitions
3*63e158a0SMatt Evans  *
4*63e158a0SMatt Evans  * Copyright 2011 Matt Evans <matt@ozlabs.org>, IBM Corporation.
5*63e158a0SMatt Evans  *
6*63e158a0SMatt Evans  * This program is free software; you can redistribute it and/or modify it
7*63e158a0SMatt Evans  * under the terms of the GNU General Public License version 2 as published
8*63e158a0SMatt Evans  * by the Free Software Foundation.
9*63e158a0SMatt Evans  */
10*63e158a0SMatt Evans 
11*63e158a0SMatt Evans #ifndef KVM__KVM_CPU_ARCH_H
12*63e158a0SMatt Evans #define KVM__KVM_CPU_ARCH_H
13*63e158a0SMatt Evans 
14*63e158a0SMatt Evans /* Architecture-specific kvm_cpu definitions. */
15*63e158a0SMatt Evans 
16*63e158a0SMatt Evans #include <linux/kvm.h>	/* for struct kvm_regs */
17*63e158a0SMatt Evans 
18*63e158a0SMatt Evans #include <pthread.h>
19*63e158a0SMatt Evans 
20*63e158a0SMatt Evans #define MSR_SF		(1UL<<63)
21*63e158a0SMatt Evans #define MSR_HV		(1UL<<60)
22*63e158a0SMatt Evans #define MSR_VEC		(1UL<<25)
23*63e158a0SMatt Evans #define MSR_VSX		(1UL<<23)
24*63e158a0SMatt Evans #define MSR_POW		(1UL<<18)
25*63e158a0SMatt Evans #define MSR_EE		(1UL<<15)
26*63e158a0SMatt Evans #define MSR_PR		(1UL<<14)
27*63e158a0SMatt Evans #define MSR_FP		(1UL<<13)
28*63e158a0SMatt Evans #define MSR_ME		(1UL<<12)
29*63e158a0SMatt Evans #define MSR_FE0		(1UL<<11)
30*63e158a0SMatt Evans #define MSR_SE		(1UL<<10)
31*63e158a0SMatt Evans #define MSR_BE		(1UL<<9)
32*63e158a0SMatt Evans #define MSR_FE1		(1UL<<8)
33*63e158a0SMatt Evans #define MSR_IR		(1UL<<5)
34*63e158a0SMatt Evans #define MSR_DR		(1UL<<4)
35*63e158a0SMatt Evans #define MSR_PMM		(1UL<<2)
36*63e158a0SMatt Evans #define MSR_RI		(1UL<<1)
37*63e158a0SMatt Evans #define MSR_LE		(1UL<<0)
38*63e158a0SMatt Evans 
39*63e158a0SMatt Evans struct kvm;
40*63e158a0SMatt Evans 
41*63e158a0SMatt Evans struct kvm_cpu {
42*63e158a0SMatt Evans 	pthread_t		thread;		/* VCPU thread */
43*63e158a0SMatt Evans 
44*63e158a0SMatt Evans 	unsigned long		cpu_id;
45*63e158a0SMatt Evans 
46*63e158a0SMatt Evans 	struct kvm		*kvm;		/* parent KVM */
47*63e158a0SMatt Evans 	int			vcpu_fd;	/* For VCPU ioctls() */
48*63e158a0SMatt Evans 	struct kvm_run		*kvm_run;
49*63e158a0SMatt Evans 
50*63e158a0SMatt Evans 	struct kvm_regs		regs;
51*63e158a0SMatt Evans 	struct kvm_sregs	sregs;
52*63e158a0SMatt Evans 	struct kvm_fpu		fpu;
53*63e158a0SMatt Evans 
54*63e158a0SMatt Evans 	u8			is_running;
55*63e158a0SMatt Evans 	u8			paused;
56*63e158a0SMatt Evans 	u8			needs_nmi;
57*63e158a0SMatt Evans 	/*
58*63e158a0SMatt Evans 	 * Although PPC KVM doesn't yet support coalesced MMIO, generic code
59*63e158a0SMatt Evans 	 * needs this in our kvm_cpu:
60*63e158a0SMatt Evans 	 */
61*63e158a0SMatt Evans 	struct kvm_coalesced_mmio_ring  *ring;
62*63e158a0SMatt Evans };
63*63e158a0SMatt Evans 
64*63e158a0SMatt Evans void kvm_cpu__irq(struct kvm_cpu *vcpu, int pin, int level);
65*63e158a0SMatt Evans 
66*63e158a0SMatt Evans #endif /* KVM__KVM_CPU_ARCH_H */
67