7#ifndef ZEPHYR_INCLUDE_SYS_MEM_MANAGE_H
8#define ZEPHYR_INCLUDE_SYS_MEM_MANAGE_H
12#if defined(CONFIG_ARM_MMU) && defined(CONFIG_ARM64)
29#define K_MEM_CACHE_NONE 2
32#define K_MEM_CACHE_WT 1
35#define K_MEM_CACHE_WB 0
43#define K_MEM_CACHE_MASK (BIT(3) - 1)
50#define K_MEM_PERM_RW BIT(3)
53#define K_MEM_PERM_EXEC BIT(4)
56#define K_MEM_PERM_USER BIT(5)
63#define K_MEM_DIRECT_MAP BIT(6)
84#define Z_MEM_VM_OFFSET ((CONFIG_KERNEL_VM_BASE + CONFIG_KERNEL_VM_OFFSET) - \
85 (CONFIG_SRAM_BASE_ADDRESS + CONFIG_SRAM_OFFSET))
87#define Z_MEM_VM_OFFSET 0
90#define Z_MEM_PHYS_ADDR(virt) ((virt) - Z_MEM_VM_OFFSET)
91#define Z_MEM_VIRT_ADDR(phys) ((phys) + Z_MEM_VM_OFFSET)
93#if Z_MEM_VM_OFFSET != 0
96#error "XIP and a virtual memory kernel are not allowed"
107#ifdef CONFIG_DEMAND_PAGING_STATS
113 unsigned long irq_locked;
116 unsigned long irq_unlocked;
118#ifndef CONFIG_DEMAND_PAGING_ALLOW_IRQ
120 unsigned long in_isr;
135#ifdef CONFIG_DEMAND_PAGING_TIMING_HISTOGRAM
137 unsigned long counts[CONFIG_DEMAND_PAGING_TIMING_HISTOGRAM_NUM_BINS];
142 unsigned long bounds[CONFIG_DEMAND_PAGING_TIMING_HISTOGRAM_NUM_BINS];
147static inline uintptr_t z_mem_phys_addr(
void *virt)
152 __ASSERT((addr >= CONFIG_KERNEL_VM_BASE) &&
153 (addr < (CONFIG_KERNEL_VM_BASE +
154 (CONFIG_KERNEL_VM_SIZE))),
155 "address %p not in permanent mappings", virt);
158 __ASSERT((addr >= CONFIG_SRAM_BASE_ADDRESS) &&
159 (addr < (CONFIG_SRAM_BASE_ADDRESS +
160 (CONFIG_SRAM_SIZE * 1024UL))),
161 "physical address 0x%lx not in RAM",
162 (
unsigned long)addr);
169 return Z_MEM_PHYS_ADDR(addr);
173static inline void *z_mem_virt_addr(
uintptr_t phys)
175 __ASSERT((phys >= CONFIG_SRAM_BASE_ADDRESS) &&
176 (phys < (CONFIG_SRAM_BASE_ADDRESS +
177 (CONFIG_SRAM_SIZE * 1024UL))),
178 "physical address 0x%lx not in RAM", (
unsigned long)phys);
184 return (
void *)Z_MEM_VIRT_ADDR(phys);
262void z_phys_unmap(
uint8_t *virt,
size_t size);
277#define K_MEM_MAP_UNINIT BIT(16)
286#define K_MEM_MAP_LOCK BIT(17)
371 uintptr_t addr,
size_t size,
size_t align);
507#include <syscalls/mem_manage.h>
static struct k_thread thread[2]
Definition: atomic.c:26
void k_mem_paging_backing_store_page_finalize(struct z_page_frame *pf, uintptr_t location)
void k_mem_paging_backing_store_page_out(uintptr_t location)
void k_mem_paging_backing_store_location_free(uintptr_t location)
void k_mem_paging_backing_store_init(void)
void k_mem_paging_backing_store_page_in(uintptr_t location)
int k_mem_paging_backing_store_location_get(struct z_page_frame *pf, uintptr_t *location, bool page_fault)
struct z_page_frame * k_mem_paging_eviction_select(bool *dirty)
void k_mem_paging_eviction_init(void)
int k_mem_page_out(void *addr, size_t size)
void k_mem_paging_histogram_backing_store_page_in_get(struct k_mem_paging_histogram_t *hist)
void k_mem_unpin(void *addr, size_t size)
void k_mem_paging_stats_get(struct k_mem_paging_stats_t *stats)
void k_mem_pin(void *addr, size_t size)
void k_mem_page_in(void *addr, size_t size)
void k_mem_paging_histogram_backing_store_page_out_get(struct k_mem_paging_histogram_t *hist)
void k_mem_paging_histogram_eviction_get(struct k_mem_paging_histogram_t *hist)
void k_mem_paging_thread_stats_get(struct k_thread *thread, struct k_mem_paging_stats_t *stats)
size_t k_mem_free_get(void)
size_t k_mem_region_align(uintptr_t *aligned_addr, size_t *aligned_size, uintptr_t addr, size_t size, size_t align)
void k_mem_unmap(void *addr, size_t size)
void * k_mem_map(size_t size, uint32_t flags)
flags
Definition: parser.h:96
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
__UINTPTR_TYPE__ uintptr_t
Definition: stdint.h:105
Definition: mem_manage.h:134
Definition: mem_manage.h:106