diff options
author | Robin Randhawa <robin.randhawa@arm.com> | 2011-10-12 16:07:02 +0100 |
---|---|---|
committer | Robin Randhawa <robin.randhawa@arm.com> | 2011-10-12 16:07:02 +0100 |
commit | 0656dea51f48c51a57e77187de4d5f66a6ba1337 (patch) | |
tree | 5b93e8967b0aa1cadd2724689346c6251cb47669 /bootwrapper/helpers.h |
Initial commit of the virtualizer v2.0 release.
This will be the basis for the VSM.
Diffstat (limited to 'bootwrapper/helpers.h')
-rw-r--r-- | bootwrapper/helpers.h | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/bootwrapper/helpers.h b/bootwrapper/helpers.h new file mode 100644 index 0000000..187df86 --- /dev/null +++ b/bootwrapper/helpers.h @@ -0,0 +1,214 @@ +/* + * $Copyright: + * ---------------------------------------------------------------- + * This confidential and proprietary software may be used only as + * authorised by a licensing agreement from ARM Limited + * (C) COPYRIGHT 2008-2011 ARM Limited + * ALL RIGHTS RESERVED + * The entire notice above must be reproduced on all authorised + * copies and copies may only be made to the extent permitted + * by a licensing agreement from ARM Limited. + * ---------------------------------------------------------------- + * File: helpers.h + * ---------------------------------------------------------------- + * $ + */ + +#ifndef _VIRT_HELPERS_H_ +#define _VIRT_HELPERS_H_ + +extern unsigned int DORMANT_BASE; +/******************************************************* + * Export prototypes of the functions which will be used + * to save/restore the Non-secure context. + *******************************************************/ +extern void wfe(void); +extern void sev(void); +extern void wfi(void); +extern void dmb(void); +extern void dsb(void); +extern void isb(void); +extern void virt_dead(void); +extern void smc(unsigned, unsigned); +extern void dcisw(unsigned); +extern void dccsw(unsigned); +extern void dccisw(unsigned); + +extern void write_sp(unsigned, unsigned); +extern void write_lr(unsigned, unsigned); +extern void write_cpsr(unsigned); +extern void write_sctlr(unsigned); +extern void write_actlr(unsigned); +extern void write_nsacr(unsigned); +extern void write_ttbr0(unsigned); +extern void write_ttbcr(unsigned); +extern void write_cntfrq(unsigned); +extern void write_cnthctl(unsigned); +extern void write_cntkctl(unsigned); +extern void write_cnthp_cval(unsigned, unsigned); +extern void write_cnthp_tval(unsigned); +extern void write_cnthp_ctl(unsigned); +extern void write_cntp_ctl(unsigned); +extern void write_cntp_tval(unsigned); +extern void write_csselr(unsigned); +extern void write_hcr(unsigned); +extern void write_hdcr(unsigned); +extern void write_hcptr(unsigned); +extern void write_hstr(unsigned); +extern void write_hsctlr(unsigned); +extern void write_httbr(unsigned long long); +extern void write_vttbr(unsigned long long); +extern void write_htcr(unsigned); +extern void write_vtcr(unsigned); +extern void write_hmair0(unsigned); +extern void write_hmair1(unsigned); +extern void write_vmpidr(unsigned); +extern void write_vmidr(unsigned); +extern void write_dacr(unsigned); +extern void write_ttbr0(unsigned); +extern void write_cpacr(unsigned); +extern void write_nsacr(unsigned); +extern void write_scr(unsigned); +extern void write_mvbar(unsigned); +extern void write_hvbar(unsigned); +extern void write_vbar(unsigned); +extern void write_prrr(unsigned); +extern void write_nmrr(unsigned); +extern void write_dfar(unsigned); +extern void write_ifar(unsigned); +extern void write_dfsr(unsigned); +extern void write_ifsr(unsigned); +extern void write_adfsr(unsigned); +extern void write_aifsr(unsigned); + +extern void read_cntpct(unsigned *, unsigned *); +extern unsigned read_dfar(void); +extern unsigned read_ifar(void); +extern unsigned read_dfsr(void); +extern unsigned read_ifsr(void); +extern unsigned read_adfsr(void); +extern unsigned read_aifsr(void); +extern unsigned read_cntfrq(void); +extern unsigned read_hsctlr(void); +extern unsigned read_hsr(void); +extern unsigned read_nmrr(void); +extern unsigned read_prrr(void); +extern unsigned read_dacr(void); +extern unsigned read_ttbr0(void); +extern unsigned read_cpacr(void); +extern unsigned read_scr(void); +extern unsigned read_cpsr(void); +extern unsigned read_midr(void); +extern unsigned read_mpidr(void); +extern unsigned read_vmpidr(void); +extern unsigned read_vmidr(void); +extern unsigned read_id_pfr0(void); +extern unsigned read_id_pfr1(void); +extern unsigned read_id_dfr0(void); +extern unsigned read_id_afr0(void); +extern unsigned read_id_mmfr0(void); +extern unsigned read_id_mmfr1(void); +extern unsigned read_id_mmfr2(void); +extern unsigned read_id_mmfr3(void); +extern unsigned read_id_isar0(void); +extern unsigned read_id_isar1(void); +extern unsigned read_id_isar2(void); +extern unsigned read_id_isar3(void); +extern unsigned read_id_isar4(void); +extern unsigned read_id_isar5(void); +extern unsigned read_aidr(void); +extern unsigned read_vbar(void); +extern unsigned read_mvbar(void); +extern unsigned read_ctr(void); +extern unsigned read_tcmtr(void); +extern unsigned read_tlbtr(void); +extern unsigned read_hcr(void); +extern unsigned read_hdcr(void); +extern unsigned read_hcptr(void); +extern unsigned read_hstr(void); +extern unsigned read_vtcr(void); +extern unsigned read_hdfar(void); +extern unsigned read_hpfar(void); +extern unsigned read_cpsr(void); +extern unsigned read_sp(unsigned); +extern unsigned read_lr(unsigned); +extern unsigned read_cpuid(void); +extern unsigned read_clusterid(void); +extern unsigned read_clidr(void); +extern unsigned read_ccsidr(void); +extern unsigned read_csselr(void); +extern unsigned read_sctlr(void); +extern unsigned read_actlr(void); +extern unsigned read_nsacr(void); +extern unsigned read_ttbr0(void); +extern unsigned read_ttbcr(void); +extern unsigned read_cnthctl(void); +extern unsigned read_cntkctl(void); +extern unsigned long read_cnthp_cval(void); +extern unsigned read_cnthp_tval(void); +extern unsigned read_cnthp_ctl(void); +extern unsigned read_cntp_ctl(void); +extern unsigned read_cntp_tval(void); +extern unsigned num_secondaries(void); +extern unsigned *copy_words(volatile unsigned *destination, + volatile unsigned *source, unsigned num_words); +extern unsigned *get_sp(unsigned, unsigned); + +/* + * V7 functions + */ +extern void save_performance_monitors(unsigned int *pointer); +extern void save_banked_registers(unsigned int *pointer); +extern void save_control_registers(unsigned int *context); +extern void save_mmu(unsigned int *pointer); +extern void save_cp15(unsigned int *pointer); + +extern void restore_control_registers(unsigned int *context); +extern void restore_mmu(unsigned int *pointer); +extern void restore_cp15(unsigned int *pointer); +extern void restore_performance_monitors(unsigned int *pointer); +extern void restore_banked_registers(unsigned int *pointer); +extern void disable_clean_inv_l1_dcache_v7(void); +extern void cache_maint_op(unsigned, unsigned); +extern unsigned get_loc(void); +extern void disable_coherency(void); +extern void disable_dcache(void); +extern void enable_coherency(void); +extern void enable_dcache(void); +extern void flush_to_loc(void); +extern void inv_tlb_all(void); +extern void inv_icache_all(void); +extern void inv_icache_mva_pou(unsigned *); +extern void inv_dcache_mva_poc(unsigned *); +extern void cln_dcache_mva_poc(unsigned *); +extern void cln_dcache_mva_pou(unsigned *); +extern void enable_user_perfmon_access(void); +extern void enable_perfmon(void); +extern void enable_swp(void); +extern void enable_pmu(void); +extern void enter_monitor_mode(void); +extern void enter_nonsecure_world(unsigned); + +/* + * GIC functions + */ +extern void save_gic_interface(unsigned int *pointer, + unsigned gic_interface_address); +extern int save_gic_distributor_private(unsigned int *pointer, + unsigned gic_distributor_address); +extern int save_gic_distributor_shared(unsigned int *pointer, + unsigned gic_distributor_address); +extern void restore_gic_interface(unsigned int *pointer, + unsigned gic_interface_address); +extern void restore_gic_distributor_private(unsigned int *pointer, + unsigned gic_distributor_address); +extern void restore_gic_distributor_shared(unsigned int *pointer, + unsigned gic_distributor_address); +extern void disable_gic_dist(unsigned int *tmp, + volatile unsigned int *dist_base); +extern void enable_gic_dist(unsigned int tmp, volatile unsigned int *dist_base); + +extern void switcher_exit(void); +extern void hyp_save(unsigned, unsigned); + +#endif /* _VIRT_HELPERS_H_ */ |