linux/arch/powerpc/include/asm/kvm_44x.h
<<
>>
Prefs
   1/*
   2 * This program is free software; you can redistribute it and/or modify
   3 * it under the terms of the GNU General Public License, version 2, as
   4 * published by the Free Software Foundation.
   5 *
   6 * This program is distributed in the hope that it will be useful,
   7 * but WITHOUT ANY WARRANTY; without even the implied warranty of
   8 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   9 * GNU General Public License for more details.
  10 *
  11 * You should have received a copy of the GNU General Public License
  12 * along with this program; if not, write to the Free Software
  13 * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  14 *
  15 * Copyright IBM Corp. 2008
  16 *
  17 * Authors: Hollis Blanchard <hollisb@us.ibm.com>
  18 */
  19
  20#ifndef __ASM_44X_H__
  21#define __ASM_44X_H__
  22
  23#include <linux/kvm_host.h>
  24
  25#define PPC44x_TLB_SIZE 64
  26
  27/* If the guest is expecting it, this can be as large as we like; we'd just
  28 * need to find some way of advertising it. */
  29#define KVM44x_GUEST_TLB_SIZE 64
  30
  31struct kvmppc_44x_tlbe {
  32        u32 tid; /* Only the low 8 bits are used. */
  33        u32 word0;
  34        u32 word1;
  35        u32 word2;
  36};
  37
  38struct kvmppc_44x_shadow_ref {
  39        struct page *page;
  40        u16 gtlb_index;
  41        u8 writeable;
  42        u8 tid;
  43};
  44
  45struct kvmppc_vcpu_44x {
  46        /* Unmodified copy of the guest's TLB. */
  47        struct kvmppc_44x_tlbe guest_tlb[KVM44x_GUEST_TLB_SIZE];
  48
  49        /* References to guest pages in the hardware TLB. */
  50        struct kvmppc_44x_shadow_ref shadow_refs[PPC44x_TLB_SIZE];
  51
  52        /* State of the shadow TLB at guest context switch time. */
  53        struct kvmppc_44x_tlbe shadow_tlb[PPC44x_TLB_SIZE];
  54        u8 shadow_tlb_mod[PPC44x_TLB_SIZE];
  55
  56        struct kvm_vcpu vcpu;
  57};
  58
  59static inline struct kvmppc_vcpu_44x *to_44x(struct kvm_vcpu *vcpu)
  60{
  61        return container_of(vcpu, struct kvmppc_vcpu_44x, vcpu);
  62}
  63
  64void kvmppc_set_pid(struct kvm_vcpu *vcpu, u32 new_pid);
  65void kvmppc_44x_tlb_put(struct kvm_vcpu *vcpu);
  66void kvmppc_44x_tlb_load(struct kvm_vcpu *vcpu);
  67
  68#endif /* __ASM_44X_H__ */
  69