cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

kvm_booke.h (2233B)


      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
     92#ifdef CONFIG_BOOKE
     93static inline ulong kvmppc_get_fault_dar(struct kvm_vcpu *vcpu)
     94{
     95	return vcpu->arch.fault_dear;
     96}
     97#endif
     98
     99static inline bool kvmppc_supports_magic_page(struct kvm_vcpu *vcpu)
    100{
    101	/* Magic page is only supported on e500v2 */
    102#ifdef CONFIG_KVM_E500V2
    103	return true;
    104#else
    105	return false;
    106#endif
    107}
    108#endif /* __ASM_KVM_BOOKE_H__ */