1/*
2 * Copyright 2014, General Dynamics C4 Systems
3 *
4 * This software may be distributed and modified according to the terms of
5 * the GNU General Public License version 2. Note that NO WARRANTY is provided.
6 * See "LICENSE_GPLv2.txt" for details.
7 *
8 * @TAG(GD_GPL)
9 */
10
11#ifndef __ARCH_MACHINE_H
12#define __ARCH_MACHINE_H
13
14#include <machine.h>
15#include <plat/machine/hardware.h>
16#include <arch/types.h>
17#include <util.h>
18
19#ifndef __ASSEMBLER__
20
21int get_num_avail_p_regs(void);
22p_region_t get_avail_p_reg(word_t i);
23int get_num_dev_p_regs(void);
24p_region_t get_dev_p_reg(word_t i);
25void map_kernel_devices(void);
26
27void initL2Cache(void);
28
29void initIRQController(void);
30void cpu_initLocalIRQController(void);
31void setIRQTrigger(irq_t irq, bool_t trigger);
32
33static inline void plat_cleanL2Range(paddr_t start, paddr_t end);
34static inline void plat_invalidateL2Range(paddr_t start, paddr_t end);
35static inline void plat_cleanInvalidateL2Range(paddr_t start, paddr_t end);
36static inline void plat_cleanInvalidateCache(void);
37
38void cleanInvalidateCacheRange_RAM(word_t start, word_t end, paddr_t pstart);
39void cleanCacheRange_RAM(word_t start, word_t end, paddr_t pstart);
40void cleanCacheRange_PoU(word_t start, word_t end, paddr_t pstart);
41void invalidateCacheRange_RAM(word_t start, word_t end, paddr_t pstart);
42void invalidateCacheRange_I(word_t start, word_t end, paddr_t pstart);
43void branchFlushRange(word_t start, word_t end, paddr_t pstart);
44
45void clean_D_PoU(void);
46void cleanInvalidate_D_PoC(void);
47void cleanCaches_PoU(void);
48void cleanInvalidateL1Caches(void);
49
50/* Cleaning memory before user-level access */
51static inline void clearMemory(word_t* ptr, word_t bits)
52{
53    memzero(ptr, BIT(bits));
54    cleanCacheRange_PoU((word_t)ptr, (word_t)ptr + BIT(bits) - 1,
55                        addrFromPPtr(ptr));
56}
57
58static inline void clearMemoryRAM(word_t* ptr, word_t bits)
59{
60    memzero(ptr, BIT(bits));
61    cleanCacheRange_RAM((word_t)ptr, (word_t)ptr + BIT(bits) - 1,
62                        addrFromPPtr(ptr));
63}
64
65#ifdef ENABLE_SMP_SUPPORT
66static inline void arch_pause(void)
67{
68    /* TODO */
69}
70#endif /* ENABLE_SMP_SUPPORT */
71
72static inline void Arch_finaliseInterrupt(void)
73{
74}
75
76#endif /* __ASSEMBLER__ */
77
78#endif /* __ARCH_MACHINE_H */
79