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)
28#define K_MEM_CACHE_NONE 2
31#define K_MEM_CACHE_WT 1
34#define K_MEM_CACHE_WB 0
42#define K_MEM_CACHE_MASK (BIT(3) - 1)
49#define K_MEM_PERM_RW BIT(3)
52#define K_MEM_PERM_EXEC BIT(4)
55#define K_MEM_PERM_USER BIT(5)
76#define Z_MEM_VM_OFFSET ((CONFIG_KERNEL_VM_BASE + CONFIG_KERNEL_VM_OFFSET) - \
77 (CONFIG_SRAM_BASE_ADDRESS + CONFIG_SRAM_OFFSET))
79#define Z_MEM_VM_OFFSET 0
82#define Z_MEM_PHYS_ADDR(virt) ((virt) - Z_MEM_VM_OFFSET)
83#define Z_MEM_VIRT_ADDR(phys) ((phys) + Z_MEM_VM_OFFSET)
85#if Z_MEM_VM_OFFSET != 0
88#error "XIP and a virtual memory kernel are not allowed"
99#ifdef CONFIG_DEMAND_PAGING_STATS
105 unsigned long irq_locked;
108 unsigned long irq_unlocked;
110#ifndef CONFIG_DEMAND_PAGING_ALLOW_IRQ
112 unsigned long in_isr;
127#ifdef CONFIG_DEMAND_PAGING_TIMING_HISTOGRAM
129 unsigned long counts[CONFIG_DEMAND_PAGING_TIMING_HISTOGRAM_NUM_BINS];
134 unsigned long bounds[CONFIG_DEMAND_PAGING_TIMING_HISTOGRAM_NUM_BINS];
139static inline uintptr_t z_mem_phys_addr(
void *virt)
144 __ASSERT((addr >= CONFIG_KERNEL_VM_BASE) &&
145 (addr < (CONFIG_KERNEL_VM_BASE +
146 (CONFIG_KERNEL_VM_SIZE))),
147 "address %p not in permanent mappings", virt);
150 __ASSERT((addr >= CONFIG_SRAM_BASE_ADDRESS) &&
151 (addr < (CONFIG_SRAM_BASE_ADDRESS +
152 (CONFIG_SRAM_SIZE * 1024UL))),
153 "physical address 0x%lx not in RAM",
154 (
unsigned long)addr);
161 return Z_MEM_PHYS_ADDR(addr);
165static inline void *z_mem_virt_addr(
uintptr_t phys)
167 __ASSERT((phys >= CONFIG_SRAM_BASE_ADDRESS) &&
168 (phys < (CONFIG_SRAM_BASE_ADDRESS +
169 (CONFIG_SRAM_SIZE * 1024UL))),
170 "physical address 0x%lx not in RAM", (
unsigned long)phys);
176 return (
void *)Z_MEM_VIRT_ADDR(phys);
254void z_phys_unmap(
uint8_t *virt,
size_t size);
269#define K_MEM_MAP_UNINIT BIT(16)
278#define K_MEM_MAP_LOCK BIT(17)
363 uintptr_t addr,
size_t size,
size_t align);
499#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)
flags
Definition: http_parser.h:131
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)
__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:126
Definition: mem_manage.h:98