Sound Open Firmware
Loading...
Searching...
No Matches
vregion.h
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-3-Clause
2// Copyright(c) 2025 Intel Corporation.
3
4/* Pre Allocated Contiguous Virtual Region */
5#ifndef __SOF_LIB_VREGION_H__
6#define __SOF_LIB_VREGION_H__
7
8#include <stddef.h>
9#include <stdint.h>
10#include <sof/compiler_attributes.h>
11
12#ifdef __cplusplus
13extern "C" {
14#endif
15
16struct vregion;
17
27 VREGION_MEM_TYPE_INTERIM, /* interim allocation that can be freed */
28 VREGION_MEM_TYPE_LIFETIME, /* lifetime allocation */
29 VREGION_MEM_TYPE_INVALID, /* Interim heap initialization failed */
30};
31
32#if CONFIG_SOF_VREGIONS
33
43struct vregion *vregion_create(size_t memsize);
44
50__syscall struct vregion *vregion_create_map(uintptr_t *vreg_start, size_t *vreg_size);
51
61__syscall void vregion_set_interim(struct vregion *vr);
62
72__syscall struct vregion *vregion_get(struct vregion *vr);
73
83__syscall struct vregion *vregion_put(struct vregion *vr);
84
96__syscall void *vregion_alloc_align(struct vregion *vr, size_t size, size_t alignment);
97
101__syscall void *vregion_alloc_coherent_align(struct vregion *vr, size_t size, size_t alignment);
102
110static inline void *vregion_alloc(struct vregion *vr, size_t size)
111{
112 return vregion_alloc_align(vr, size, 0);
113}
114
118static inline void *vregion_alloc_coherent(struct vregion *vr, size_t size)
119{
120 return vregion_alloc_coherent_align(vr, size, 0);
121}
122
131__syscall void vregion_free(struct vregion *vr, void *ptr);
132
138void vregion_info(struct vregion *vr);
139
147void vregion_mem_info(struct vregion *vr, size_t *size, uintptr_t *start);
148
149bool vregion_verify(struct vregion *vr);
150
151#include <zephyr/syscalls/vregion.h>
152
153#else /* CONFIG_SOF_VREGIONS */
154
155struct vregion {
156 unsigned int use_count;
157};
158
159static inline struct vregion *vregion_create(size_t memsize)
160{
161 return NULL;
162}
163static inline struct vregion *vregion_create_map(uintptr_t *vreg_start, size_t *vreg_size)
164{
165 return NULL;
166}
167static inline void vregion_set_interim(struct vregion *vr) {}
168static inline struct vregion *vregion_get(struct vregion *vr)
169{
170 return vr;
171}
172static inline struct vregion *vregion_put(struct vregion *vr)
173{
174 return vr;
175}
176static inline void *vregion_alloc(struct vregion *vr, size_t size)
177{
178 return NULL;
179}
180static inline void *vregion_alloc_coherent(struct vregion *vr, size_t size)
181{
182 return NULL;
183}
184static inline void *vregion_alloc_align(struct vregion *vr, size_t size, size_t alignment)
185{
186 return NULL;
187}
188static inline void *vregion_alloc_coherent_align(struct vregion *vr, size_t size,
189 size_t alignment)
190{
191 return NULL;
192}
193static inline void vregion_free(struct vregion *vr, void *ptr) {}
194static inline void vregion_info(struct vregion *vr) {}
195static inline void vregion_mem_info(struct vregion *vr, size_t *size, uintptr_t *start)
196{
197 if (size)
198 *size = 0;
199}
200static inline bool vregion_verify(struct vregion *vr) {return false;}
201
202#endif /* CONFIG_SOF_VREGIONS */
203
204#ifdef __cplusplus
205}
206#endif
207
208#endif /* __SOF_LIB_VREGION_H__ */
Definition vregion.h:155
unsigned int use_count
Definition vregion.h:156
static void vregion_info(struct vregion *vr)
Definition vregion.h:194
static void * vregion_alloc_coherent_align(struct vregion *vr, size_t size, size_t alignment)
Definition vregion.h:188
static struct vregion * vregion_put(struct vregion *vr)
Definition vregion.h:172
static void * vregion_alloc_align(struct vregion *vr, size_t size, size_t alignment)
Definition vregion.h:184
vregion_mem_type
Memory types for virtual region allocations.
Definition vregion.h:26
@ VREGION_MEM_TYPE_INVALID
Definition vregion.h:29
@ VREGION_MEM_TYPE_INTERIM
Definition vregion.h:27
@ VREGION_MEM_TYPE_LIFETIME
Definition vregion.h:28
static struct vregion * vregion_create(size_t memsize)
Definition vregion.h:159
static struct vregion * vregion_create_map(uintptr_t *vreg_start, size_t *vreg_size)
Definition vregion.h:163
static void vregion_set_interim(struct vregion *vr)
Definition vregion.h:167
static struct vregion * vregion_get(struct vregion *vr)
Definition vregion.h:168
static void * vregion_alloc_coherent(struct vregion *vr, size_t size)
Definition vregion.h:180
static bool vregion_verify(struct vregion *vr)
Definition vregion.h:200
static void vregion_mem_info(struct vregion *vr, size_t *size, uintptr_t *start)
Definition vregion.h:195
static void vregion_free(struct vregion *vr, void *ptr)
Definition vregion.h:193
static void * vregion_alloc(struct vregion *vr, size_t size)
Definition vregion.h:176