blob: 30303888fb657bd2f7ef4e321b0553c538d92b6e [file] [log] [blame]
Antonio Nino Diaz233c7c12017-03-08 14:40:23 +00001/*
2 * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
3 *
dp-armfa3cf0b2017-05-03 09:38:09 +01004 * SPDX-License-Identifier: BSD-3-Clause
Antonio Nino Diaz233c7c12017-03-08 14:40:23 +00005 */
6
7#ifndef __XLAT_TABLES_PRIVATE_H__
8#define __XLAT_TABLES_PRIVATE_H__
9
Antonio Nino Diaz233c7c12017-03-08 14:40:23 +000010#include <platform_def.h>
Sandrine Bailleux090c8492017-05-19 09:59:37 +010011#include <xlat_tables_defs.h>
Antonio Nino Diaz233c7c12017-03-08 14:40:23 +000012
Antonio Nino Diazac998032017-02-27 17:23:54 +000013#if PLAT_XLAT_TABLES_DYNAMIC
14/*
15 * Shifts and masks to access fields of an mmap_attr_t
16 */
17/* Dynamic or static */
18#define MT_DYN_SHIFT 30 /* 31 would cause undefined behaviours */
19
20/*
21 * Memory mapping private attributes
22 *
23 * Private attributes not exposed in the mmap_attr_t enum.
24 */
25typedef enum {
26 /*
27 * Regions mapped before the MMU can't be unmapped dynamically (they are
28 * static) and regions mapped with MMU enabled can be unmapped. This
29 * behaviour can't be overridden.
30 *
31 * Static regions can overlap each other, dynamic regions can't.
32 */
33 MT_STATIC = 0 << MT_DYN_SHIFT,
34 MT_DYNAMIC = 1 << MT_DYN_SHIFT
35} mmap_priv_attr_t;
36
37/*
38 * Function used to invalidate all levels of the translation walk for a given
39 * virtual address. It must be called for every translation table entry that is
40 * modified.
41 */
42void xlat_arch_tlbi_va(uintptr_t va);
43
44/*
45 * This function has to be called at the end of any code that uses the function
46 * xlat_arch_tlbi_va().
47 */
48void xlat_arch_tlbi_va_sync(void);
49
Antonio Nino Diazac998032017-02-27 17:23:54 +000050#endif /* PLAT_XLAT_TABLES_DYNAMIC */
51
Antonio Nino Diaz233c7c12017-03-08 14:40:23 +000052/* Print VA, PA, size and attributes of all regions in the mmap array. */
53void print_mmap(mmap_region_t *const mmap);
54
55/*
56 * Print the current state of the translation tables by reading them from
57 * memory.
58 */
59void xlat_tables_print(xlat_ctx_t *ctx);
60
61/*
Antonio Nino Diaz233c7c12017-03-08 14:40:23 +000062 * Architecture-specific initialization code.
63 */
Antonio Nino Diazefabaa92017-04-27 13:30:22 +010064
65/* Returns the current Exception Level. The returned EL must be 1 or higher. */
66int xlat_arch_current_el(void);
67
68/*
69 * Returns the bit mask that has to be ORed to the rest of a translation table
70 * descriptor so that execution of code is prohibited at the given Exception
71 * Level.
72 */
73uint64_t xlat_arch_get_xn_desc(int el);
Antonio Nino Diaz233c7c12017-03-08 14:40:23 +000074
Sandrine Bailleuxc5b63772017-05-31 13:31:48 +010075/*
76 * Return the maximum physical address supported by the hardware.
77 * This value depends on the execution state (AArch32/AArch64).
78 */
79unsigned long long xlat_arch_get_max_supported_pa(void);
Antonio Nino Diaz233c7c12017-03-08 14:40:23 +000080
81/* Enable MMU and configure it to use the specified translation tables. */
Sandrine Bailleuxc5b63772017-05-31 13:31:48 +010082void enable_mmu_arch(unsigned int flags,
83 uint64_t *base_table,
84 unsigned long long max_pa);
Antonio Nino Diaz233c7c12017-03-08 14:40:23 +000085
86/* Return 1 if the MMU of this Exception Level is enabled, 0 otherwise. */
87int is_mmu_enabled(void);
88
89#endif /* __XLAT_TABLES_PRIVATE_H__ */