forked from thesofproject/sof
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathalloc.h
More file actions
153 lines (130 loc) · 4.12 KB
/
alloc.h
File metadata and controls
153 lines (130 loc) · 4.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/* SPDX-License-Identifier: BSD-3-Clause
*
* Copyright(c) 2016 Intel Corporation. All rights reserved.
*
* Author: Liam Girdwood <liam.r.girdwood@linux.intel.com>
* Keyon Jie <yang.jie@linux.intel.com>
*/
/**
* \file xtos/include/rtos/alloc.h
* \brief Memory Allocation API definition
* \author Liam Girdwood <liam.r.girdwood@linux.intel.com>
* \author Keyon Jie <yang.jie@linux.intel.com>
*/
#ifndef __SOF_LIB_ALLOC_H__
#define __SOF_LIB_ALLOC_H__
#include <rtos/bit.h>
#include <rtos/string.h>
#include <sof/trace/trace.h>
#include <user/trace.h>
#include <stddef.h>
#include <stdint.h>
/** \addtogroup alloc_api Memory Allocation API
* @{
*/
/** \name Heap zone flags
* @{
*/
/*
* for compatibility with the initial `flags` meaning
* SOF_MEM_FLAG_ should start at BIT(2)
* the first two positions are reserved for SOF_BUF_ flags
*/
/** \brief Indicates we should return DMA-able memory. */
#define SOF_MEM_FLAG_DMA BIT(2)
/** \brief Indicates that original content should not be copied by realloc. */
#define SOF_MEM_FLAG_NO_COPY BIT(3)
/** \brief Indicates that if we should return uncached address. */
#define SOF_MEM_FLAG_COHERENT BIT(4)
/** \brief Indicates that if we should return L3 address. */
#define SOF_MEM_FLAG_L3 BIT(5)
/** \brief Indicates that if we should return Low power memory address. */
#define SOF_MEM_FLAG_LOW_POWER BIT(6)
/** \brief Indicates that if we should return kernel memory address. */
#define SOF_MEM_FLAG_KERNEL BIT(7)
/** \brief Indicates that if we should return user memory address. */
#define SOF_MEM_FLAG_USER BIT(8)
/** \brief Indicates that if we should return shared user memory address. */
#define SOF_MEM_FLAG_USER_SHARED_BUFFER BIT(9)
/** @} */
/**
* Allocates memory block.
* @param flags Flags, see SOF_MEM_FLAG_...
* @param bytes Size in bytes.
* @param alignment Alignment in bytes.
* @return Pointer to the allocated memory or NULL if failed.
*/
void *rmalloc_align(uint32_t flags, size_t bytes,
uint32_t alignment);
/**
* Similar to rmalloc_align(), but no alignment can be specified.
*/
void *rmalloc(uint32_t flags, size_t bytes);
/**
* Similar to rmalloc(), guarantees that returned block is zeroed.
*/
void *rzalloc(uint32_t flags, size_t bytes);
/**
* Allocates memory block.
* @param flags Flags, see SOF_MEM_FLAG_...
* @param bytes Size in bytes.
* @param alignment Alignment in bytes.
* @return Pointer to the allocated memory or NULL if failed.
*/
void *rballoc_align(uint32_t flags, size_t bytes,
uint32_t alignment);
/**
* Similar to rballoc_align(), returns buffer aligned to PLATFORM_DCACHE_ALIGN.
*/
static inline void *rballoc(uint32_t flags, size_t bytes)
{
return rballoc_align(flags, bytes, PLATFORM_DCACHE_ALIGN);
}
/**
* Changes size of the memory block allocated.
* @param ptr Address of the block to resize.
* @param flags Flags, see SOF_MEM_FLAG_...
* @param bytes New size in bytes.
* @param old_bytes Old size in bytes.
* @param alignment Alignment in bytes.
* @return Pointer to the resized memory of NULL if failed.
*/
void *rbrealloc_align(void *ptr, uint32_t flags, size_t bytes,
size_t old_bytes, uint32_t alignment);
/**
* Similar to rballoc_align(), returns resized buffer aligned to
* PLATFORM_DCACHE_ALIGN.
*/
static inline void *rbrealloc(void *ptr, uint32_t flags,
size_t bytes, size_t old_bytes)
{
return rbrealloc_align(ptr, flags, bytes, old_bytes,
PLATFORM_DCACHE_ALIGN);
}
/**
* Frees the memory block.
* @param ptr Pointer to the memory block.
*/
void rfree(void *ptr);
/**
* Allocates memory block from the system heap reserved for the specified core.
* @param core Core id.
* @param bytes Size in bytes.
*/
void *rzalloc_core_sys(int core, size_t bytes);
/**
* Calculates length of the null-terminated string.
* @param s String.
* @return Length of the string in bytes.
*/
int rstrlen(const char *s);
/**
* Compares two strings, see man strcmp.
* @param s1 First string to compare.
* @param s2 Second string to compare.
* @return See man strcmp.
*/
int rstrcmp(const char *s1, const char *s2);
static inline void l3_heap_save(void) {}
/** @}*/
#endif /* __SOF_LIB_ALLOC_H__ */