File Index
Files and directories
Sign in
FILE

kvm_booke.h

File preview with syntax highlighting.

linux-6.19.14/arch/powerpc/include/asm/kvm_booke.h C
  1/* SPDX-License-Identifier: GPL-2.0-only */
  2/*
  3 *
  4 * Copyright SUSE Linux Products GmbH 2010
  5 *
  6 * Authors: Alexander Graf <agraf@suse.de>
  7 */
  8
  9#ifndef __ASM_KVM_BOOKE_H__
 10#define __ASM_KVM_BOOKE_H__
 11
 12#include <linux/types.h>
 13#include <linux/kvm_host.h>
 14
 15/*
 16 * Number of available lpids. Only the low-order 6 bits of LPID rgister are
 17 * implemented on e500mc+ cores.
 18 */
 19#define KVMPPC_NR_LPIDS                        64
 20
 21#define KVMPPC_INST_EHPRIV		0x7c00021c
 22#define EHPRIV_OC_SHIFT			11
 23/* "ehpriv 1" : ehpriv with OC = 1 is used for debug emulation */
 24#define EHPRIV_OC_DEBUG			1
 25
 26static inline void kvmppc_set_gpr(struct kvm_vcpu *vcpu, int num, ulong val)
 27{
 28	vcpu->arch.regs.gpr[num] = val;
 29}
 30
 31static inline ulong kvmppc_get_gpr(struct kvm_vcpu *vcpu, int num)
 32{
 33	return vcpu->arch.regs.gpr[num];
 34}
 35
 36static inline void kvmppc_set_cr(struct kvm_vcpu *vcpu, u32 val)
 37{
 38	vcpu->arch.regs.ccr = val;
 39}
 40
 41static inline u32 kvmppc_get_cr(struct kvm_vcpu *vcpu)
 42{
 43	return vcpu->arch.regs.ccr;
 44}
 45
 46static inline void kvmppc_set_xer(struct kvm_vcpu *vcpu, ulong val)
 47{
 48	vcpu->arch.regs.xer = val;
 49}
 50
 51static inline ulong kvmppc_get_xer(struct kvm_vcpu *vcpu)
 52{
 53	return vcpu->arch.regs.xer;
 54}
 55
 56static inline bool kvmppc_need_byteswap(struct kvm_vcpu *vcpu)
 57{
 58	/* XXX Would need to check TLB entry */
 59	return false;
 60}
 61
 62static inline void kvmppc_set_ctr(struct kvm_vcpu *vcpu, ulong val)
 63{
 64	vcpu->arch.regs.ctr = val;
 65}
 66
 67static inline ulong kvmppc_get_ctr(struct kvm_vcpu *vcpu)
 68{
 69	return vcpu->arch.regs.ctr;
 70}
 71
 72static inline void kvmppc_set_lr(struct kvm_vcpu *vcpu, ulong val)
 73{
 74	vcpu->arch.regs.link = val;
 75}
 76
 77static inline ulong kvmppc_get_lr(struct kvm_vcpu *vcpu)
 78{
 79	return vcpu->arch.regs.link;
 80}
 81
 82static inline void kvmppc_set_pc(struct kvm_vcpu *vcpu, ulong val)
 83{
 84	vcpu->arch.regs.nip = val;
 85}
 86
 87static inline ulong kvmppc_get_pc(struct kvm_vcpu *vcpu)
 88{
 89	return vcpu->arch.regs.nip;
 90}
 91
 92static inline void kvmppc_set_fpr(struct kvm_vcpu *vcpu, int i, u64 val)
 93{
 94	vcpu->arch.fp.fpr[i][TS_FPROFFSET] = val;
 95}
 96
 97static inline u64 kvmppc_get_fpr(struct kvm_vcpu *vcpu, int i)
 98{
 99	return vcpu->arch.fp.fpr[i][TS_FPROFFSET];
100}
101
102#ifdef CONFIG_BOOKE
103static inline ulong kvmppc_get_fault_dar(struct kvm_vcpu *vcpu)
104{
105	return vcpu->arch.fault_dear;
106}
107#endif
108
109static inline bool kvmppc_supports_magic_page(struct kvm_vcpu *vcpu)
110{
111	/* Magic page is only supported on e500v2 */
112#ifdef CONFIG_KVM_E500V2
113	return true;
114#else
115	return false;
116#endif
117}
118#endif /* __ASM_KVM_BOOKE_H__ */
~/ Read-only file preview.