blob: 310ba48d13f00eb29d8461c8eeb9560ab453c895 [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001/* 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 ulong kvmppc_get_fault_dar(struct kvm_vcpu *vcpu)
93{
94 return vcpu->arch.fault_dear;
95}
96
97static inline bool kvmppc_supports_magic_page(struct kvm_vcpu *vcpu)
98{
99 /* Magic page is only supported on e500v2 */
100#ifdef CONFIG_KVM_E500V2
101 return true;
102#else
103 return false;
104#endif
105}
106#endif /* __ASM_KVM_BOOKE_H__ */