Zephyr Project API 4.0.0
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)   (attr & MT_TYPE_MASK)
 
#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)    MMU_REGION_ENTRY(name, adr, 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
Definition arm_mpu_v7m.h:160

◆ 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:3408
#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:520
#define DT_REG_ADDR(node_id)
Get a node's (only) register block address.
Definition devicetree.h:2433
#define DT_REG_SIZE(node_id)
Get a node's (only) register block size.
Definition devicetree.h:2454
#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 
)     MMU_REGION_ENTRY(name, adr, adr, sz, attrs)

◆ 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)    (attr & MT_TYPE_MASK)

◆ 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