Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  *
0004  * Copyright SUSE Linux Products GmbH 2010
0005  *
0006  * Authors: Alexander Graf <agraf@suse.de>
0007  */
0008 
0009 #ifndef __ASM_KVM_BOOKE_H__
0010 #define __ASM_KVM_BOOKE_H__
0011 
0012 #include <linux/types.h>
0013 #include <linux/kvm_host.h>
0014 
0015 /*
0016  * Number of available lpids. Only the low-order 6 bits of LPID rgister are
0017  * implemented on e500mc+ cores.
0018  */
0019 #define KVMPPC_NR_LPIDS                        64
0020 
0021 #define KVMPPC_INST_EHPRIV      0x7c00021c
0022 #define EHPRIV_OC_SHIFT         11
0023 /* "ehpriv 1" : ehpriv with OC = 1 is used for debug emulation */
0024 #define EHPRIV_OC_DEBUG         1
0025 
0026 static inline void kvmppc_set_gpr(struct kvm_vcpu *vcpu, int num, ulong val)
0027 {
0028     vcpu->arch.regs.gpr[num] = val;
0029 }
0030 
0031 static inline ulong kvmppc_get_gpr(struct kvm_vcpu *vcpu, int num)
0032 {
0033     return vcpu->arch.regs.gpr[num];
0034 }
0035 
0036 static inline void kvmppc_set_cr(struct kvm_vcpu *vcpu, u32 val)
0037 {
0038     vcpu->arch.regs.ccr = val;
0039 }
0040 
0041 static inline u32 kvmppc_get_cr(struct kvm_vcpu *vcpu)
0042 {
0043     return vcpu->arch.regs.ccr;
0044 }
0045 
0046 static inline void kvmppc_set_xer(struct kvm_vcpu *vcpu, ulong val)
0047 {
0048     vcpu->arch.regs.xer = val;
0049 }
0050 
0051 static inline ulong kvmppc_get_xer(struct kvm_vcpu *vcpu)
0052 {
0053     return vcpu->arch.regs.xer;
0054 }
0055 
0056 static inline bool kvmppc_need_byteswap(struct kvm_vcpu *vcpu)
0057 {
0058     /* XXX Would need to check TLB entry */
0059     return false;
0060 }
0061 
0062 static inline void kvmppc_set_ctr(struct kvm_vcpu *vcpu, ulong val)
0063 {
0064     vcpu->arch.regs.ctr = val;
0065 }
0066 
0067 static inline ulong kvmppc_get_ctr(struct kvm_vcpu *vcpu)
0068 {
0069     return vcpu->arch.regs.ctr;
0070 }
0071 
0072 static inline void kvmppc_set_lr(struct kvm_vcpu *vcpu, ulong val)
0073 {
0074     vcpu->arch.regs.link = val;
0075 }
0076 
0077 static inline ulong kvmppc_get_lr(struct kvm_vcpu *vcpu)
0078 {
0079     return vcpu->arch.regs.link;
0080 }
0081 
0082 static inline void kvmppc_set_pc(struct kvm_vcpu *vcpu, ulong val)
0083 {
0084     vcpu->arch.regs.nip = val;
0085 }
0086 
0087 static inline ulong kvmppc_get_pc(struct kvm_vcpu *vcpu)
0088 {
0089     return vcpu->arch.regs.nip;
0090 }
0091 
0092 #ifdef CONFIG_BOOKE
0093 static inline ulong kvmppc_get_fault_dar(struct kvm_vcpu *vcpu)
0094 {
0095     return vcpu->arch.fault_dear;
0096 }
0097 #endif
0098 
0099 static inline bool kvmppc_supports_magic_page(struct kvm_vcpu *vcpu)
0100 {
0101     /* Magic page is only supported on e500v2 */
0102 #ifdef CONFIG_KVM_E500V2
0103     return true;
0104 #else
0105     return false;
0106 #endif
0107 }
0108 #endif /* __ASM_KVM_BOOKE_H__ */