Zephyr API Documentation 4.2.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
mm.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2020 Intel Corporation
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef ZEPHYR_INCLUDE_KERNEL_MM_H
8#define ZEPHYR_INCLUDE_KERNEL_MM_H
9
10#include <zephyr/sys/util.h>
11#include <zephyr/toolchain.h>
12#if defined(CONFIG_ARM_MMU) && defined(CONFIG_ARM64)
14#elif defined(CONFIG_ARM_AARCH32_MMU)
16#endif /* CONFIG_ARM_MMU && CONFIG_ARM64 */
17
19
26
34
36#define K_MEM_CACHE_NONE 2
37
39#define K_MEM_CACHE_WT 1
40
42#define K_MEM_CACHE_WB 0
43
44/*
45 * ARM64 Specific flags are defined in arch/arm64/arm_mem.h,
46 * pay attention to be not conflicted when updating these flags.
47 */
48
50#define K_MEM_CACHE_MASK (BIT(3) - 1)
51
53
61
63#define K_MEM_PERM_RW BIT(3)
64
66#define K_MEM_PERM_EXEC BIT(4)
67
69#define K_MEM_PERM_USER BIT(5)
70
72
78
80#define K_MEM_DIRECT_MAP BIT(6)
81
83
84#ifndef _ASMLANGUAGE
85#include <stdint.h>
86#include <stddef.h>
87#include <inttypes.h>
88
89#ifdef __cplusplus
90extern "C" {
91#endif
92
98
108#define K_MEM_MAP_UNINIT BIT(16)
109
117#define K_MEM_MAP_LOCK BIT(17)
118
136#define K_MEM_MAP_UNPAGED BIT(18)
137
139
151size_t k_mem_free_get(void);
152
192static inline void *k_mem_map(size_t size, uint32_t flags)
193{
194 return k_mem_map_phys_guard((uintptr_t)NULL, size, flags, true);
195}
196
197#ifdef CONFIG_DEMAND_MAPPING
238static inline void *k_mem_map_unpaged(uintptr_t location, size_t size, uint32_t flags)
239{
241 return k_mem_map_phys_guard(location, size, flags, false);
242}
243#endif
244
258static inline void k_mem_unmap(void *addr, size_t size)
259{
260 k_mem_unmap_phys_guard(addr, size, true);
261}
262
278int k_mem_update_flags(void *addr, size_t size, uint32_t flags);
279
293size_t k_mem_region_align(uintptr_t *aligned_addr, size_t *aligned_size,
294 uintptr_t addr, size_t size, size_t align);
295
296#ifdef __cplusplus
297}
298#endif
299
301
302#endif /* !_ASMLANGUAGE */
303#endif /* ZEPHYR_INCLUDE_KERNEL_MM_H */
#define K_MEM_MAP_UNPAGED
Region will be unpaged i.e.
Definition mm.h:136
static void k_mem_unmap(void *addr, size_t size)
Un-map mapped memory.
Definition mm.h:258
size_t k_mem_free_get(void)
Return the amount of free memory available.
static void * k_mem_map(size_t size, uint32_t flags)
Map anonymous memory into Zephyr's address space.
Definition mm.h:192
size_t k_mem_region_align(uintptr_t *aligned_addr, size_t *aligned_size, uintptr_t addr, size_t size, size_t align)
Given an arbitrary region, provide a aligned region that covers it.
int k_mem_update_flags(void *addr, size_t size, uint32_t flags)
Modify memory mapping attribute flags.
void * k_mem_map_phys_guard(uintptr_t phys, size_t size, uint32_t flags, bool is_anon)
Map memory into virtual address space with guard pages.
void k_mem_unmap_phys_guard(void *addr, size_t size, bool is_anon)
Un-map memory mapped via k_mem_map_phys_guard().
#define NULL
Definition iar_missing_defs.h:20
flags
Definition parser.h:97
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINTPTR_TYPE__ uintptr_t
Definition stdint.h:105
Misc utilities.
Macros to abstract toolchain specific capabilities.