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