123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- #include <linux/init.h>
- #include <linux/linkage.h>
- #include <linux/irqchip/arm-gic-v3.h>
- #include <asm/assembler.h>
- #include <asm/kvm_arm.h>
- #include <asm/kvm_asm.h>
- #include <asm/ptrace.h>
- #include <asm/virt.h>
- .text
- .align 11
- ENTRY(__hyp_stub_vectors)
- ventry el2_sync_invalid
- ventry el2_irq_invalid
- ventry el2_fiq_invalid
- ventry el2_error_invalid
- ventry el2_sync_invalid
- ventry el2_irq_invalid
- ventry el2_fiq_invalid
- ventry el2_error_invalid
- ventry el1_sync
- ventry el1_irq_invalid
- ventry el1_fiq_invalid
- ventry el1_error_invalid
- ventry el1_sync_invalid
- ventry el1_irq_invalid
- ventry el1_fiq_invalid
- ventry el1_error_invalid
- ENDPROC(__hyp_stub_vectors)
- .align 11
- el1_sync:
- mrs x30, esr_el2
- lsr x30, x30, #ESR_ELx_EC_SHIFT
- cmp x30, #ESR_ELx_EC_HVC64
- b.ne 9f
- cmp x0, #HVC_GET_VECTORS
- b.ne 1f
- mrs x0, vbar_el2
- b 9f
- 1: cmp x0, #HVC_SET_VECTORS
- b.ne 2f
- msr vbar_el2, x1
- b 9f
- 2: cmp x0, #HVC_SOFT_RESTART
- b.ne 3f
- mov x0, x2
- mov x2, x4
- mov x4, x1
- mov x1, x3
- br x4
-
- 3: mov x0, #ARM_EXCEPTION_HYP_GONE
- 9: eret
- ENDPROC(el1_sync)
- .macro invalid_vector label
- \label:
- b \label
- ENDPROC(\label)
- .endm
- invalid_vector el2_sync_invalid
- invalid_vector el2_irq_invalid
- invalid_vector el2_fiq_invalid
- invalid_vector el2_error_invalid
- invalid_vector el1_sync_invalid
- invalid_vector el1_irq_invalid
- invalid_vector el1_fiq_invalid
- invalid_vector el1_error_invalid
- ENTRY(__hyp_get_vectors)
- str lr, [sp, #-16]!
- mov x0, #HVC_GET_VECTORS
- hvc #0
- ldr lr, [sp], #16
- ret
- ENDPROC(__hyp_get_vectors)
- ENTRY(__hyp_set_vectors)
- str lr, [sp, #-16]!
- mov x1, x0
- mov x0, #HVC_SET_VECTORS
- hvc #0
- ldr lr, [sp], #16
- ret
- ENDPROC(__hyp_set_vectors)
|