| /* |
| * Copyright 2010-2011 Freescale Semiconductor, Inc. |
| * |
| * 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_BOOKE_HV_ASM_H |
| #define ASM_KVM_BOOKE_HV_ASM_H |
| |
| #ifdef __ASSEMBLY__ |
| |
| /* |
| * All exceptions from guest state must go through KVM |
| * (except for those which are delivered directly to the guest) -- |
| * there are no exceptions for which we fall through directly to |
| * the normal host handler. |
| * |
| * 32-bit host |
| * Expected inputs (normal exceptions): |
| * SCRATCH0 = saved r10 |
| * r10 = thread struct |
| * r11 = appropriate SRR1 variant (currently used as scratch) |
| * r13 = saved CR |
| * *(r10 + THREAD_NORMSAVE(0)) = saved r11 |
| * *(r10 + THREAD_NORMSAVE(2)) = saved r13 |
| * |
| * Expected inputs (crit/mcheck/debug exceptions): |
| * appropriate SCRATCH = saved r8 |
| * r8 = exception level stack frame |
| * r9 = *(r8 + _CCR) = saved CR |
| * r11 = appropriate SRR1 variant (currently used as scratch) |
| * *(r8 + GPR9) = saved r9 |
| * *(r8 + GPR10) = saved r10 (r10 not yet clobbered) |
| * *(r8 + GPR11) = saved r11 |
| * |
| * 64-bit host |
| * Expected inputs (GEN/GDBELL/DBG/CRIT/MC exception types): |
| * r10 = saved CR |
| * r13 = PACA_POINTER |
| * *(r13 + PACA_EX##type + EX_R10) = saved r10 |
| * *(r13 + PACA_EX##type + EX_R11) = saved r11 |
| * SPRN_SPRG_##type##_SCRATCH = saved r13 |
| * |
| * Expected inputs (TLB exception type): |
| * r10 = saved CR |
| * r12 = extlb pointer |
| * r13 = PACA_POINTER |
| * *(r12 + EX_TLB_R10) = saved r10 |
| * *(r12 + EX_TLB_R11) = saved r11 |
| * *(r12 + EX_TLB_R13) = saved r13 |
| * SPRN_SPRG_GEN_SCRATCH = saved r12 |
| * |
| * Only the bolted version of TLB miss exception handlers is supported now. |
| */ |
| .macro DO_KVM intno srr1 |
| #ifdef CONFIG_KVM_BOOKE_HV |
| BEGIN_FTR_SECTION |
| mtocrf 0x80, r11 /* check MSR[GS] without clobbering reg */ |
| bf 3, 1975f |
| b kvmppc_handler_\intno\()_\srr1 |
| 1975: |
| END_FTR_SECTION_IFSET(CPU_FTR_EMB_HV) |
| #endif |
| .endm |
| |
| #endif /*__ASSEMBLY__ */ |
| #endif /* ASM_KVM_BOOKE_HV_ASM_H */ |