PageRenderTime 39ms CodeModel.GetById 33ms app.highlight 4ms RepoModel.GetById 1ms app.codeStats 0ms

/arch/powerpc/include/asm/kvm_book3s_asm.h

https://github.com/aicjofs/android_kernel_lge_v500_20d
C Header | 125 lines | 80 code | 20 blank | 25 comment | 33 complexity | e0820ca3612eab1445a9d1fb21bc5fb9 MD5 | raw file
  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 SUSE Linux Products GmbH 2009
 16 *
 17 * Authors: Alexander Graf <agraf@suse.de>
 18 */
 19
 20#ifndef __ASM_KVM_BOOK3S_ASM_H__
 21#define __ASM_KVM_BOOK3S_ASM_H__
 22
 23#ifdef __ASSEMBLY__
 24
 25#ifdef CONFIG_KVM_BOOK3S_HANDLER
 26
 27#include <asm/kvm_asm.h>
 28
 29.macro DO_KVM intno
 30	.if (\intno == BOOK3S_INTERRUPT_SYSTEM_RESET) || \
 31	    (\intno == BOOK3S_INTERRUPT_MACHINE_CHECK) || \
 32	    (\intno == BOOK3S_INTERRUPT_DATA_STORAGE) || \
 33	    (\intno == BOOK3S_INTERRUPT_INST_STORAGE) || \
 34	    (\intno == BOOK3S_INTERRUPT_DATA_SEGMENT) || \
 35	    (\intno == BOOK3S_INTERRUPT_INST_SEGMENT) || \
 36	    (\intno == BOOK3S_INTERRUPT_EXTERNAL) || \
 37	    (\intno == BOOK3S_INTERRUPT_EXTERNAL_HV) || \
 38	    (\intno == BOOK3S_INTERRUPT_ALIGNMENT) || \
 39	    (\intno == BOOK3S_INTERRUPT_PROGRAM) || \
 40	    (\intno == BOOK3S_INTERRUPT_FP_UNAVAIL) || \
 41	    (\intno == BOOK3S_INTERRUPT_DECREMENTER) || \
 42	    (\intno == BOOK3S_INTERRUPT_SYSCALL) || \
 43	    (\intno == BOOK3S_INTERRUPT_TRACE) || \
 44	    (\intno == BOOK3S_INTERRUPT_PERFMON) || \
 45	    (\intno == BOOK3S_INTERRUPT_ALTIVEC) || \
 46	    (\intno == BOOK3S_INTERRUPT_VSX)
 47
 48	b	kvmppc_trampoline_\intno
 49kvmppc_resume_\intno:
 50
 51	.endif
 52.endm
 53
 54#else
 55
 56.macro DO_KVM intno
 57.endm
 58
 59#endif /* CONFIG_KVM_BOOK3S_HANDLER */
 60
 61#else  /*__ASSEMBLY__ */
 62
 63/*
 64 * This struct goes in the PACA on 64-bit processors.  It is used
 65 * to store host state that needs to be saved when we enter a guest
 66 * and restored when we exit, but isn't specific to any particular
 67 * guest or vcpu.  It also has some scratch fields used by the guest
 68 * exit code.
 69 */
 70struct kvmppc_host_state {
 71	ulong host_r1;
 72	ulong host_r2;
 73	ulong host_msr;
 74	ulong vmhandler;
 75	ulong scratch0;
 76	ulong scratch1;
 77	u8 in_guest;
 78	u8 restore_hid5;
 79	u8 napping;
 80
 81#ifdef CONFIG_KVM_BOOK3S_64_HV
 82	struct kvm_vcpu *kvm_vcpu;
 83	struct kvmppc_vcore *kvm_vcore;
 84	unsigned long xics_phys;
 85	u64 dabr;
 86	u64 host_mmcr[3];
 87	u32 host_pmc[8];
 88	u64 host_purr;
 89	u64 host_spurr;
 90	u64 host_dscr;
 91	u64 dec_expires;
 92#endif
 93};
 94
 95struct kvmppc_book3s_shadow_vcpu {
 96	ulong gpr[14];
 97	u32 cr;
 98	u32 xer;
 99
100	u32 fault_dsisr;
101	u32 last_inst;
102	ulong ctr;
103	ulong lr;
104	ulong pc;
105	ulong shadow_srr1;
106	ulong fault_dar;
107
108#ifdef CONFIG_PPC_BOOK3S_32
109	u32     sr[16];			/* Guest SRs */
110
111	struct kvmppc_host_state hstate;
112#endif
113
114#ifdef CONFIG_PPC_BOOK3S_64
115	u8 slb_max;			/* highest used guest slb entry */
116	struct  {
117		u64     esid;
118		u64     vsid;
119	} slb[64];			/* guest SLB */
120#endif
121};
122
123#endif /*__ASSEMBLY__ */
124
125#endif /* __ASM_KVM_BOOK3S_ASM_H__ */