Zephyr API Documentation 4.0.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
arm_mmu.h File Reference
#include <stdint.h>
#include <stdlib.h>

Go to the source code of this file.

Data Structures

struct  arm_mmu_region
 
struct  arm_mmu_config
 
struct  arm_mmu_ptables
 
struct  k_mem_partition_attr_t
 

Macros

#define MT_TYPE_MASK   0x7U
 
#define MT_TYPE(attr)
 
#define MT_DEVICE_nGnRnE   0U
 
#define MT_DEVICE_nGnRE   1U
 
#define MT_DEVICE_GRE   2U
 
#define MT_NORMAL_NC   3U
 
#define MT_NORMAL   4U
 
#define MT_NORMAL_WT   5U
 
#define MEMORY_ATTRIBUTES
 
#define MT_PERM_SHIFT   3U
 
#define MT_SEC_SHIFT   4U
 
#define MT_P_EXECUTE_SHIFT   5U
 
#define MT_U_EXECUTE_SHIFT   6U
 
#define MT_RW_AP_SHIFT   7U
 
#define MT_NO_OVERWRITE_SHIFT   8U
 
#define MT_NON_GLOBAL_SHIFT   9U
 
#define MT_PAGED_OUT_SHIFT   10U
 
#define MT_RO   (0U << MT_PERM_SHIFT)
 
#define MT_RW   (1U << MT_PERM_SHIFT)
 
#define MT_RW_AP_ELx   (1U << MT_RW_AP_SHIFT)
 
#define MT_RW_AP_EL_HIGHER   (0U << MT_RW_AP_SHIFT)
 
#define MT_SECURE   (0U << MT_SEC_SHIFT)
 
#define MT_NS   (1U << MT_SEC_SHIFT)
 
#define MT_P_EXECUTE   (0U << MT_P_EXECUTE_SHIFT)
 
#define MT_P_EXECUTE_NEVER   (1U << MT_P_EXECUTE_SHIFT)
 
#define MT_U_EXECUTE   (0U << MT_U_EXECUTE_SHIFT)
 
#define MT_U_EXECUTE_NEVER   (1U << MT_U_EXECUTE_SHIFT)
 
#define MT_NO_OVERWRITE   (1U << MT_NO_OVERWRITE_SHIFT)
 
#define MT_G   (0U << MT_NON_GLOBAL_SHIFT)
 
#define MT_NG   (1U << MT_NON_GLOBAL_SHIFT)
 
#define MT_PAGED_OUT   (1U << MT_PAGED_OUT_SHIFT)
 
#define MT_P_RW_U_RW   (MT_RW | MT_RW_AP_ELx | MT_P_EXECUTE_NEVER | MT_U_EXECUTE_NEVER)
 
#define MT_P_RW_U_NA   (MT_RW | MT_RW_AP_EL_HIGHER | MT_P_EXECUTE_NEVER | MT_U_EXECUTE_NEVER)
 
#define MT_P_RO_U_RO   (MT_RO | MT_RW_AP_ELx | MT_P_EXECUTE_NEVER | MT_U_EXECUTE_NEVER)
 
#define MT_P_RO_U_NA   (MT_RO | MT_RW_AP_EL_HIGHER | MT_P_EXECUTE_NEVER | MT_U_EXECUTE_NEVER)
 
#define MT_P_RO_U_RX   (MT_RO | MT_RW_AP_ELx | MT_P_EXECUTE_NEVER | MT_U_EXECUTE)
 
#define MT_P_RX_U_RX   (MT_RO | MT_RW_AP_ELx | MT_P_EXECUTE | MT_U_EXECUTE)
 
#define MT_P_RX_U_NA   (MT_RO | MT_RW_AP_EL_HIGHER | MT_P_EXECUTE | MT_U_EXECUTE_NEVER)
 
#define MT_DEFAULT_SECURE_STATE   MT_SECURE
 
#define ARCH_DATA_PAGE_LOADED   BIT(0)
 
#define ARCH_DATA_PAGE_ACCESSED   BIT(1)
 
#define ARCH_DATA_PAGE_DIRTY   BIT(2)
 
#define ARCH_DATA_PAGE_NOT_MAPPED   BIT(3)
 
#define ARCH_UNPAGED_ANON_ZERO   0x0000fffffffff000
 
#define ARCH_UNPAGED_ANON_UNINIT   0x0000ffffffffe000
 
#define MMU_REGION_ENTRY(_name, _base_pa, _base_va, _size, _attrs)
 
#define MMU_REGION_FLAT_ENTRY(name, adr, sz, attrs)
 
#define MMU_REGION_DT_FLAT_ENTRY(node_id, attrs)
 
#define MMU_REGION_DT_COMPAT_FOREACH_FLAT_ENTRY(compat, attr)
 
#define K_MEM_PARTITION_P_RW_U_RW
 
#define K_MEM_PARTITION_P_RW_U_NA
 
#define K_MEM_PARTITION_P_RO_U_RO
 
#define K_MEM_PARTITION_P_RO_U_NA
 
#define K_MEM_PARTITION_P_RX_U_RX
 

Variables

const struct arm_mmu_config mmu_config
 

Macro Definition Documentation

◆ ARCH_DATA_PAGE_ACCESSED

#define ARCH_DATA_PAGE_ACCESSED   BIT(1)

◆ ARCH_DATA_PAGE_DIRTY

#define ARCH_DATA_PAGE_DIRTY   BIT(2)

◆ ARCH_DATA_PAGE_LOADED

#define ARCH_DATA_PAGE_LOADED   BIT(0)

◆ ARCH_DATA_PAGE_NOT_MAPPED

#define ARCH_DATA_PAGE_NOT_MAPPED   BIT(3)

◆ ARCH_UNPAGED_ANON_UNINIT

#define ARCH_UNPAGED_ANON_UNINIT   0x0000ffffffffe000

◆ ARCH_UNPAGED_ANON_ZERO

#define ARCH_UNPAGED_ANON_ZERO   0x0000fffffffff000

◆ K_MEM_PARTITION_P_RO_U_NA

#define K_MEM_PARTITION_P_RO_U_NA
Value:
#define MT_P_RO_U_NA
Definition arm_mmu.h:85
uint32_t k_mem_partition_attr_t
Definition arch.h:346

◆ K_MEM_PARTITION_P_RO_U_RO

#define K_MEM_PARTITION_P_RO_U_RO
Value:
#define MT_P_RO_U_RO
Definition arm_mmu.h:84

◆ K_MEM_PARTITION_P_RW_U_NA

#define K_MEM_PARTITION_P_RW_U_NA
Value:
#define MT_P_RW_U_NA
Definition arm_mmu.h:83

◆ K_MEM_PARTITION_P_RW_U_RW

#define K_MEM_PARTITION_P_RW_U_RW
Value:
#define MT_P_RW_U_RW
Definition arm_mmu.h:82

◆ K_MEM_PARTITION_P_RX_U_RX

#define K_MEM_PARTITION_P_RX_U_RX
Value:
#define MT_P_RX_U_RX
Definition arm_mmu.h:87

◆ MEMORY_ATTRIBUTES

#define MEMORY_ATTRIBUTES
Value:
((0x00 << (MT_DEVICE_nGnRnE * 8)) | \
(0x04 << (MT_DEVICE_nGnRE * 8)) | \
(0x0c << (MT_DEVICE_GRE * 8)) | \
(0x44 << (MT_NORMAL_NC * 8)) | \
(0xffUL << (MT_NORMAL * 8)) | \
(0xbbUL << (MT_NORMAL_WT * 8)))
#define MT_NORMAL_NC
Definition arm_mmu.h:25
#define MT_DEVICE_nGnRnE
Definition arm_mmu.h:22
#define MT_NORMAL
Definition arm_mmu.h:26
#define MT_NORMAL_WT
Definition arm_mmu.h:27
#define MT_DEVICE_GRE
Definition arm_mmu.h:24
#define MT_DEVICE_nGnRE
Definition arm_mmu.h:23

◆ MMU_REGION_DT_COMPAT_FOREACH_FLAT_ENTRY

#define MMU_REGION_DT_COMPAT_FOREACH_FLAT_ENTRY ( compat,
attr )
Value:
#define DT_FOREACH_STATUS_OKAY_VARGS(compat, fn,...)
Invokes fn for each status okay node of a compatible with multiple arguments.
Definition devicetree.h:3415
#define MMU_REGION_DT_FLAT_ENTRY(node_id, attrs)
Definition arm_mmu.h:86

◆ MMU_REGION_DT_FLAT_ENTRY

#define MMU_REGION_DT_FLAT_ENTRY ( node_id,
attrs )
Value:
DT_REG_ADDR(node_id), \
DT_REG_SIZE(node_id), \
attrs),
#define DT_NODE_FULL_NAME(node_id)
Get a devicetree node's name with unit-address as a string literal.
Definition devicetree.h:527
#define DT_REG_ADDR(node_id)
Get a node's (only) register block address.
Definition devicetree.h:2440
#define DT_REG_SIZE(node_id)
Get a node's (only) register block size.
Definition devicetree.h:2461
#define MMU_REGION_FLAT_ENTRY(name, adr, sz, attrs)
Definition arm_mmu.h:67

◆ MMU_REGION_ENTRY

#define MMU_REGION_ENTRY ( _name,
_base_pa,
_base_va,
_size,
_attrs )
Value:
{\
.name = _name, \
.base_pa = _base_pa, \
.base_va = _base_va, \
.size = _size, \
.attrs = _attrs, \
}

◆ MMU_REGION_FLAT_ENTRY

#define MMU_REGION_FLAT_ENTRY ( name,
adr,
sz,
attrs )
Value:
MMU_REGION_ENTRY(name, adr, adr, sz, attrs)
#define MMU_REGION_ENTRY(_name, _base_pa, _base_va, _size, _attrs)
Definition arm_mmu.h:58

◆ MT_DEFAULT_SECURE_STATE

#define MT_DEFAULT_SECURE_STATE   MT_SECURE

◆ MT_DEVICE_GRE

#define MT_DEVICE_GRE   2U

◆ MT_DEVICE_nGnRE

#define MT_DEVICE_nGnRE   1U

◆ MT_DEVICE_nGnRnE

#define MT_DEVICE_nGnRnE   0U

◆ MT_G

#define MT_G   (0U << MT_NON_GLOBAL_SHIFT)

◆ MT_NG

#define MT_NG   (1U << MT_NON_GLOBAL_SHIFT)

◆ MT_NO_OVERWRITE

#define MT_NO_OVERWRITE   (1U << MT_NO_OVERWRITE_SHIFT)

◆ MT_NO_OVERWRITE_SHIFT

#define MT_NO_OVERWRITE_SHIFT   8U

◆ MT_NON_GLOBAL_SHIFT

#define MT_NON_GLOBAL_SHIFT   9U

◆ MT_NORMAL

#define MT_NORMAL   4U

◆ MT_NORMAL_NC

#define MT_NORMAL_NC   3U

◆ MT_NORMAL_WT

#define MT_NORMAL_WT   5U

◆ MT_NS

#define MT_NS   (1U << MT_SEC_SHIFT)

◆ MT_P_EXECUTE

#define MT_P_EXECUTE   (0U << MT_P_EXECUTE_SHIFT)

◆ MT_P_EXECUTE_NEVER

#define MT_P_EXECUTE_NEVER   (1U << MT_P_EXECUTE_SHIFT)

◆ MT_P_EXECUTE_SHIFT

#define MT_P_EXECUTE_SHIFT   5U

◆ MT_P_RO_U_NA

◆ MT_P_RO_U_RO

#define MT_P_RO_U_RO   (MT_RO | MT_RW_AP_ELx | MT_P_EXECUTE_NEVER | MT_U_EXECUTE_NEVER)

◆ MT_P_RO_U_RX

#define MT_P_RO_U_RX   (MT_RO | MT_RW_AP_ELx | MT_P_EXECUTE_NEVER | MT_U_EXECUTE)

◆ MT_P_RW_U_NA

◆ MT_P_RW_U_RW

#define MT_P_RW_U_RW   (MT_RW | MT_RW_AP_ELx | MT_P_EXECUTE_NEVER | MT_U_EXECUTE_NEVER)

◆ MT_P_RX_U_NA

#define MT_P_RX_U_NA   (MT_RO | MT_RW_AP_EL_HIGHER | MT_P_EXECUTE | MT_U_EXECUTE_NEVER)

◆ MT_P_RX_U_RX

#define MT_P_RX_U_RX   (MT_RO | MT_RW_AP_ELx | MT_P_EXECUTE | MT_U_EXECUTE)

◆ MT_PAGED_OUT

#define MT_PAGED_OUT   (1U << MT_PAGED_OUT_SHIFT)

◆ MT_PAGED_OUT_SHIFT

#define MT_PAGED_OUT_SHIFT   10U

◆ MT_PERM_SHIFT

#define MT_PERM_SHIFT   3U

◆ MT_RO

#define MT_RO   (0U << MT_PERM_SHIFT)

◆ MT_RW

#define MT_RW   (1U << MT_PERM_SHIFT)

◆ MT_RW_AP_EL_HIGHER

#define MT_RW_AP_EL_HIGHER   (0U << MT_RW_AP_SHIFT)

◆ MT_RW_AP_ELx

#define MT_RW_AP_ELx   (1U << MT_RW_AP_SHIFT)

◆ MT_RW_AP_SHIFT

#define MT_RW_AP_SHIFT   7U

◆ MT_SEC_SHIFT

#define MT_SEC_SHIFT   4U

◆ MT_SECURE

#define MT_SECURE   (0U << MT_SEC_SHIFT)

◆ MT_TYPE

#define MT_TYPE ( attr)
Value:
(attr & MT_TYPE_MASK)
#define MT_TYPE_MASK
Definition arm_mmu.h:20

◆ MT_TYPE_MASK

#define MT_TYPE_MASK   0x7U

◆ MT_U_EXECUTE

#define MT_U_EXECUTE   (0U << MT_U_EXECUTE_SHIFT)

◆ MT_U_EXECUTE_NEVER

#define MT_U_EXECUTE_NEVER   (1U << MT_U_EXECUTE_SHIFT)

◆ MT_U_EXECUTE_SHIFT

#define MT_U_EXECUTE_SHIFT   6U

Variable Documentation

◆ mmu_config

const struct arm_mmu_config mmu_config
extern