mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-16 09:34:18 +00:00

Enforce full include path for includes. Deprecate old paths. The following folders inside include/lib have been left unchanged: - include/lib/cpus/${ARCH} - include/lib/el3_runtime/${ARCH} The reason for this change is that having a global namespace for includes isn't a good idea. It defeats one of the advantages of having folders and it introduces problems that are sometimes subtle (because you may not know the header you are actually including if there are two of them). For example, this patch had to be created because two headers were called the same way:e0ea0928d5
("Fix gpio includes of mt8173 platform to avoid collision."). More recently, this patch has had similar problems:46f9b2c3a2
("drivers: add tzc380 support"). This problem was introduced in commit4ecca33988
("Move include and source files to logical locations"). At that time, there weren't too many headers so it wasn't a real issue. However, time has shown that this creates problems. Platforms that want to preserve the way they include headers may add the removed paths to PLAT_INCLUDES, but this is discouraged. Change-Id: I39dc53ed98f9e297a5966e723d1936d6ccf2fc8f Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
92 lines
2.6 KiB
C
92 lines
2.6 KiB
C
/*
|
|
* Copyright (c) 2014-2018, ARM Limited and Contributors. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#ifndef XLAT_TABLES_H
|
|
#define XLAT_TABLES_H
|
|
|
|
#include <lib/xlat_tables/xlat_tables_defs.h>
|
|
|
|
#ifndef __ASSEMBLY__
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#include <lib/xlat_tables/xlat_mmu_helpers.h>
|
|
|
|
/* Helper macro to define entries for mmap_region_t. It creates
|
|
* identity mappings for each region.
|
|
*/
|
|
#define MAP_REGION_FLAT(adr, sz, attr) MAP_REGION(adr, adr, sz, attr)
|
|
|
|
/* Helper macro to define entries for mmap_region_t. It allows to
|
|
* re-map address mappings from 'pa' to 'va' for each region.
|
|
*/
|
|
#define MAP_REGION(pa, va, sz, attr) {(pa), (va), (sz), (attr)}
|
|
|
|
/*
|
|
* Shifts and masks to access fields of an mmap attribute
|
|
*/
|
|
#define MT_TYPE_MASK U(0x7)
|
|
#define MT_TYPE(_attr) ((_attr) & MT_TYPE_MASK)
|
|
/* Access permissions (RO/RW) */
|
|
#define MT_PERM_SHIFT U(3)
|
|
/* Security state (SECURE/NS) */
|
|
#define MT_SEC_SHIFT U(4)
|
|
/* Access permissions for instruction execution (EXECUTE/EXECUTE_NEVER) */
|
|
#define MT_EXECUTE_SHIFT U(5)
|
|
|
|
/*
|
|
* Memory mapping attributes
|
|
*/
|
|
|
|
/*
|
|
* Memory types supported.
|
|
* These are organised so that, going down the list, the memory types are
|
|
* getting weaker; conversely going up the list the memory types are getting
|
|
* stronger.
|
|
*/
|
|
#define MT_DEVICE U(0)
|
|
#define MT_NON_CACHEABLE U(1)
|
|
#define MT_MEMORY U(2)
|
|
/* Values up to 7 are reserved to add new memory types in the future */
|
|
|
|
#define MT_RO (U(0) << MT_PERM_SHIFT)
|
|
#define MT_RW (U(1) << MT_PERM_SHIFT)
|
|
|
|
#define MT_SECURE (U(0) << MT_SEC_SHIFT)
|
|
#define MT_NS (U(1) << MT_SEC_SHIFT)
|
|
|
|
/*
|
|
* Access permissions for instruction execution are only relevant for normal
|
|
* read-only memory, i.e. MT_MEMORY | MT_RO. They are ignored (and potentially
|
|
* overridden) otherwise:
|
|
* - Device memory is always marked as execute-never.
|
|
* - Read-write normal memory is always marked as execute-never.
|
|
*/
|
|
#define MT_EXECUTE (U(0) << MT_EXECUTE_SHIFT)
|
|
#define MT_EXECUTE_NEVER (U(1) << MT_EXECUTE_SHIFT)
|
|
|
|
/* Compound attributes for most common usages */
|
|
#define MT_CODE (MT_MEMORY | MT_RO | MT_EXECUTE)
|
|
#define MT_RO_DATA (MT_MEMORY | MT_RO | MT_EXECUTE_NEVER)
|
|
|
|
/*
|
|
* Structure for specifying a single region of memory.
|
|
*/
|
|
typedef struct mmap_region {
|
|
unsigned long long base_pa;
|
|
uintptr_t base_va;
|
|
size_t size;
|
|
unsigned int attr;
|
|
} mmap_region_t;
|
|
|
|
/* Generic translation table APIs */
|
|
void init_xlat_tables(void);
|
|
void mmap_add_region(unsigned long long base_pa, uintptr_t base_va,
|
|
size_t size, unsigned int attr);
|
|
void mmap_add(const mmap_region_t *mm);
|
|
|
|
#endif /*__ASSEMBLY__*/
|
|
#endif /* XLAT_TABLES_H */
|