-
Notifications
You must be signed in to change notification settings - Fork 350
Expand file tree
/
Copy pathalloc.h
More file actions
142 lines (120 loc) · 3.65 KB
/
alloc.h
File metadata and controls
142 lines (120 loc) · 3.65 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
/* 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 Allocate DMA-able memory. */
#define SOF_MEM_FLAG_DMA BIT(2)
/** \brief realloc() skips copying the original content. */
#define SOF_MEM_FLAG_NO_COPY BIT(3)
/** \brief Allocate uncached address. */
#define SOF_MEM_FLAG_COHERENT BIT(4)
/** \brief Allocate L3 address. */
#define SOF_MEM_FLAG_L3 BIT(5)
/** \brief Allocate Low power memory address. */
#define SOF_MEM_FLAG_LOW_POWER BIT(6)
/** \brief Allocate kernel memory address. */
#define SOF_MEM_FLAG_KERNEL BIT(7)
/** \brief Allocate user memory address. */
#define SOF_MEM_FLAG_USER BIT(8)
/** \brief Allocate shared user memory address. */
#define SOF_MEM_FLAG_USER_SHARED_BUFFER BIT(9)
/** \brief Use allocation method for large buffers. */
#define SOF_MEM_FLAG_LARGE_BUFFER BIT(10)
/** @} */
/**
* 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);
}
/**
* 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);
struct k_heap;
static inline void k_heap_init(struct k_heap *heap, void *mem, size_t bytes)
{
}
void *sof_heap_alloc(struct k_heap *heap, uint32_t flags, size_t bytes,
size_t alignment);
void sof_heap_free(struct k_heap *heap, void *addr);
struct k_heap *sof_sys_heap_get(void);
struct k_heap *sof_sys_user_heap_get(void);
/**
* 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__ */