AArch64 EL2 hypervisor for QEMU virt that boots at EL2
1#ifndef HV_ARCH_H
2#define HV_ARCH_H
3
4#include "hv/types.h"
5
6struct trap_frame;
7struct vcpu;
8
9extern char __bss_start[];
10extern char __bss_end[];
11extern char __image_start[];
12extern char __image_end[];
13extern char __vectors_el2[];
14extern char __guest_image_start[];
15extern char __guest_image_end[];
16
17uint64_t arch_current_el(void);
18uint64_t arch_mpidr_el1(void);
19uint64_t arch_cntpct_el0(void);
20uint64_t arch_cntfrq_el0(void);
21uint64_t arch_vectors_base(void);
22bool arch_vectors_aligned(void);
23uint64_t arch_irq_save(void);
24void arch_irq_restore(uint64_t flags);
25void arch_dump_el2_state(void);
26void arch_el2_configure(uint64_t vttbr, uint64_t vtcr);
27void arch_enable_el2_mmu(uint64_t ttbr0, uint64_t tcr, uint64_t mair);
28void arch_install_vectors(void);
29void arch_prepare_guest_entry(struct vcpu *vcpu);
30void arch_capture_el1_sysregs(struct vcpu *vcpu);
31void arch_sync_el1_sysregs(const struct vcpu *vcpu);
32void arch_vcpu_enter(struct vcpu *vcpu);
33void arch_halt(void) __attribute__((noreturn));
34void arch_inject_guest_undef(struct vcpu *vcpu);
35void arch_advance_guest_pc(struct vcpu *vcpu);
36void arch_tlbi_vmalle1is(void);
37void hv_main(uint64_t boot_dtb_pa);
38
39#endif