diff options
Diffstat (limited to 'acsr/helpers.h')
-rw-r--r-- | acsr/helpers.h | 228 |
1 files changed, 228 insertions, 0 deletions
diff --git a/acsr/helpers.h b/acsr/helpers.h new file mode 100644 index 0000000..0c7fd40 --- /dev/null +++ b/acsr/helpers.h @@ -0,0 +1,228 @@ +/* + Copyright (c) 2009-11, ARM Limited. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of ARM nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. +*/ + +/* + * V7 functions + */ +extern void save_control_registers(unsigned *pointer, int is_secure); +extern void save_mmu(unsigned *pointer); +extern void save_mpu(unsigned *pointer); +extern void save_performance_monitors(unsigned *pointer); +extern void save_banked_registers(unsigned *pointer); +extern void save_cp15(unsigned *pointer); +extern void save_vfp(unsigned *pointer); +extern void save_generic_timer(unsigned *pointer, int is_hyp); +extern void save_v7_debug(unsigned *pointer); +extern void save_fault_status(unsigned *pointer); + +extern void restore_control_registers(unsigned *pointer, int is_secure); +extern void restore_mmu(unsigned *pointer); +extern void restore_mpu(unsigned *pointer); +extern void restore_performance_monitors(unsigned *pointer); +extern void restore_banked_registers(unsigned *pointer); +extern void restore_cp15(unsigned *pointer); +extern void restore_vfp(unsigned *pointer); +extern void restore_generic_timer(unsigned *pointer, int is_hyp); +extern void restore_v7_debug(unsigned *pointer); +extern void restore_fault_status(unsigned *pointer); + +extern unsigned va_to_pa(unsigned virtual_address); +extern unsigned get_cpu_type(void); + +extern unsigned read_mpidr(void); +extern unsigned read_sctlr(void); +extern unsigned read_actlr(void); +extern unsigned read_prrr(void); +extern unsigned read_nmrr(void); +extern unsigned read_l2ctlr(void); +extern unsigned read_mvbar(void); +extern unsigned read_cbar(void); +extern unsigned read_drar(void); +extern unsigned read_dsar(void); +extern unsigned read_teehbr(void); +extern unsigned read_l2ectlr(void); +extern unsigned read_pmuserenr(void); +extern unsigned read_pmintenset(void); +extern unsigned read_pmintenclr(void); +extern unsigned read_pmovsset(void); +extern unsigned read_pmccntr(void); +extern unsigned read_pmxevtyper(void); +extern unsigned read_pmxevcntr(void); +extern unsigned read_pmcr(void); +extern unsigned read_pmcntenset(void); +extern unsigned read_pmcntenclr(void); +extern unsigned read_pmovsr(void); +extern unsigned read_pmswinc(void); +extern unsigned read_pmselr(void); +extern unsigned read_pmceid0(void); +extern unsigned read_pmceid1(void); +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_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_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_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_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_nsacr(void); +extern unsigned read_ttbr0(void); +extern unsigned read_ttbcr(void); +extern unsigned read_cnthctl(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 long long read_httbr(void); +extern unsigned long long read_vttbr(void); +extern unsigned long long read_cntpct(void); + +extern void dsb(void); +extern void dmb(void); +extern void wfi(void); +extern void endless_wfi(void); +extern void wfe(void); +extern void sev(void); +extern void isb(void); + +extern void write_osdlr(unsigned value); +extern void write_sctlr(unsigned value); +extern void write_actlr(unsigned value); +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_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 write_l2ectlr(unsigned); +extern void write_pmuserenr(unsigned); +extern void write_pmintenset(unsigned); +extern void write_pmintenclr(unsigned); +extern void write_pmovsset(unsigned); +extern void write_pmccntr(unsigned); +extern void write_pmxevtyper(unsigned); +extern void write_pmxevcntr(unsigned); +extern void write_pmcr(unsigned); +extern void write_pmcntenset(unsigned); +extern void write_pmcntenclr(unsigned); +extern void write_pmovsr(unsigned); +extern void write_pmswinc(unsigned); +extern void write_pmselr(unsigned); +extern void write_pmceid0(unsigned); +extern void write_pmceid1(unsigned); +extern void write_osdlr(unsigned value); + +extern unsigned * copy_words(volatile unsigned *destination, volatile unsigned *source, unsigned num_words); +extern void appf_memcpy(void *dst, const void *src, unsigned length); +extern void appf_memset(void *dst, unsigned value, unsigned length); + +extern void initialize_spinlock(bakery_t *bakery); +extern void get_spinlock(unsigned cpuid, bakery_t *bakery); +extern void release_spinlock(unsigned cpuid, bakery_t *bakery); + +/* + * GCC Compatibility + */ +#ifndef __ARMCC_VERSION +#define __nop() __asm__ __volatile__( "nop\n" ) +#endif |