2009-01-03 16:23:10 -06:00
/*
2011-06-14 18:35:14 -05:00
* Copyright ( C ) 2008 - 2011 Freescale Semiconductor , Inc . All rights reserved .
2009-01-03 16:23:10 -06:00
*
* Author : Yu Liu , < yu . liu @ freescale . com >
*
* Description :
* This file is derived from arch / powerpc / include / asm / kvm_44x . h ,
* by Hollis Blanchard < hollisb @ us . ibm . com > .
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License , version 2 , as
* published by the Free Software Foundation .
*/
# ifndef __ASM_KVM_E500_H__
# define __ASM_KVM_E500_H__
# include <linux/kvm_host.h>
# define BOOKE_INTERRUPT_SIZE 36
# define E500_PID_NUM 3
# define E500_TLB_NUM 2
struct tlbe {
u32 mas1 ;
u32 mas2 ;
u32 mas3 ;
u32 mas7 ;
} ;
2011-06-14 18:34:59 -05:00
# define E500_TLB_VALID 1
# define E500_TLB_DIRTY 2
struct tlbe_priv {
pfn_t pfn ;
unsigned int flags ; /* E500_TLB_* */
} ;
2011-06-14 18:35:14 -05:00
struct vcpu_id_table ;
2009-01-03 16:23:10 -06:00
struct kvmppc_vcpu_e500 {
/* Unmodified copy of the guest's TLB. */
2011-06-14 18:34:59 -05:00
struct tlbe * gtlb_arch [ E500_TLB_NUM ] ;
/* KVM internal information associated with each guest TLB entry */
struct tlbe_priv * gtlb_priv [ E500_TLB_NUM ] ;
2009-01-03 16:23:10 -06:00
2011-06-14 18:34:59 -05:00
unsigned int gtlb_size [ E500_TLB_NUM ] ;
unsigned int gtlb_nv [ E500_TLB_NUM ] ;
2009-01-03 16:23:10 -06:00
u32 host_pid [ E500_PID_NUM ] ;
u32 pid [ E500_PID_NUM ] ;
2011-03-29 16:49:10 -05:00
u32 svr ;
2009-01-03 16:23:10 -06:00
u32 mas0 ;
u32 mas1 ;
u32 mas2 ;
u32 mas3 ;
u32 mas4 ;
u32 mas5 ;
u32 mas6 ;
u32 mas7 ;
2011-06-14 18:35:14 -05:00
/* vcpu id table */
struct vcpu_id_table * idt ;
2010-01-22 18:50:29 +08:00
u32 l1csr0 ;
2009-01-03 16:23:10 -06:00
u32 l1csr1 ;
u32 hid0 ;
u32 hid1 ;
2010-01-22 19:36:53 +08:00
u32 tlb0cfg ;
u32 tlb1cfg ;
2011-04-27 17:24:21 -05:00
u64 mcar ;
2009-01-03 16:23:10 -06:00
struct kvm_vcpu vcpu ;
} ;
static inline struct kvmppc_vcpu_e500 * to_e500 ( struct kvm_vcpu * vcpu )
{
return container_of ( vcpu , struct kvmppc_vcpu_e500 , vcpu ) ;
}
# endif /* __ASM_KVM_E500_H__ */