Vision Apps User Guide
app_mem.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright (c) 2017 Texas Instruments Incorporated
4  *
5  * All rights reserved not granted herein.
6  *
7  * Limited License.
8  *
9  * Texas Instruments Incorporated grants a world-wide, royalty-free, non-exclusive
10  * license under copyrights and patents it now or hereafter owns or controls to make,
11  * have made, use, import, offer to sell and sell ("Utilize") this software subject to the
12  * terms herein. With respect to the foregoing patent license, such license is granted
13  * solely to the extent that any such patent is necessary to Utilize the software alone.
14  * The patent license shall not apply to any combinations which include this software,
15  * other than combinations with devices manufactured by or for TI ("TI Devices").
16  * No hardware patent is licensed hereunder.
17  *
18  * Redistributions must preserve existing copyright notices and reproduce this license
19  * (including the above copyright notice and the disclaimer and (if applicable) source
20  * code license limitations below) in the documentation and/or other materials provided
21  * with the distribution
22  *
23  * Redistribution and use in binary form, without modification, are permitted provided
24  * that the following conditions are met:
25  *
26  * * No reverse engineering, decompilation, or disassembly of this software is
27  * permitted with respect to any software provided in binary form.
28  *
29  * * any redistribution and use are licensed by TI for use only with TI Devices.
30  *
31  * * Nothing shall obligate TI to provide you with source code for the software
32  * licensed and provided to you in object code.
33  *
34  * If software source code is provided to you, modification and redistribution of the
35  * source code are permitted provided that the following conditions are met:
36  *
37  * * any redistribution and use of the source code, including any resulting derivative
38  * works, are licensed by TI for use only with TI Devices.
39  *
40  * * any redistribution and use of any object code compiled from the source code
41  * and any resulting derivative works, are licensed by TI for use only with TI Devices.
42  *
43  * Neither the name of Texas Instruments Incorporated nor the names of its suppliers
44  *
45  * may be used to endorse or promote products derived from this software without
46  * specific prior written permission.
47  *
48  * DISCLAIMER.
49  *
50  * THIS SOFTWARE IS PROVIDED BY TI AND TI'S LICENSORS "AS IS" AND ANY EXPRESS
51  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
52  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
53  * IN NO EVENT SHALL TI AND TI'S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT,
54  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
55  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
56  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
57  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
58  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
59  * OF THE POSSIBILITY OF SUCH DAMAGE.
60  *
61  */
62 
63 #ifndef APP_MEM_H_
64 #define APP_MEM_H_
65 
66 #include <stdint.h>
67 
79 #define APP_MEM_HEAP_NAME_MAX (16u)
80 
89 #define APP_MEM_HEAP_DDR (0u)
90 
92 #define APP_MEM_HEAP_L3 (1u)
93 
95 #define APP_MEM_HEAP_L2 (2u)
96 
98 #define APP_MEM_HEAP_L1 (3u)
99 
101 #define APP_MEM_HEAP_DDR_SCRATCH (4u)
102 
104 #define APP_MEM_HEAP_DDR_NON_CACHE (5u)
105 
107 #define APP_MEM_HEAP_MAX (6u)
108 
109 /* @} */
110 
126 #define APP_MEM_HEAP_FLAGS_TYPE_LINEAR_ALLOCATE (0x00000001u)
127 
130 #define APP_MEM_HEAP_FLAGS_IS_SHARED (0x00000004u)
131 
134 #define APP_MEM_HEAP_FLAGS_DO_CLEAR_ON_ALLOC (0x00000008u)
135 
136 /* @} */
137 
141 typedef struct {
142 
143  void *base;
145  uint32_t size;
146  uint32_t flags;
149 
153 typedef struct {
154 
157 
158 
162 typedef struct {
163 
164  uint32_t heap_id;
165  char heap_name[APP_MEM_HEAP_NAME_MAX];
166  uint32_t heap_size;
167  uint32_t free_size;
170 
174 static inline void *APP_MEM_ALIGNPTR(void *val, uint32_t align)
175 {
176  return (void*)((((uintptr_t)val+align-1) / align) * align);
177 }
178 
182 static inline uint64_t APP_MEM_ALIGN64(uint64_t val, uint32_t align)
183 {
184  return (uint64_t)( (uint64_t)(val+align-1) / align) * align;
185 }
186 
190 static inline uint32_t APP_MEM_ALIGN32(uint32_t val, uint32_t align)
191 {
192  return (uint32_t)( (uint32_t)(val+align-1) / align) * align;
193 }
194 
206 
214 int32_t appMemInit(app_mem_init_prm_t *prm);
215 
221 int32_t appMemDeInit();
222 
233 void *appMemAlloc(uint32_t heap_id, uint32_t size, uint32_t align);
234 
235 
244 int32_t appMemResetScratchHeap(uint32_t heap_id);
245 
256 int32_t appMemFree(uint32_t heap_id, void *ptr, uint32_t size);
257 
266 #if defined(x86_64) || defined(QNX)
267 uint64_t appMemGetDmaBufFd(void *virPtr, volatile uint32_t *dmaBufFdOffset);
268 #else
269 uint32_t appMemGetDmaBufFd(void *virPtr, volatile uint32_t *dmaBufFdOffset);
270 #endif
271 
282 #if defined(x86_64) || defined(QNX)
283 int32_t appMemTranslateDmaBufFd(uint64_t dmaBufFd, uint32_t size, uint64_t *virtPtr, uint64_t *phyPtr);
284 #else
285 int32_t appMemTranslateDmaBufFd(uint32_t dmaBufFd, uint32_t size, uint64_t *virtPtr, uint64_t *phyPtr);
286 #endif
287 
293 #if defined(x86_64) || defined(QNX)
294 void appMemCloseDmaBufFd(uint64_t dmaBufFd);
295 #else
296 void appMemCloseDmaBufFd(int32_t dmaBufFd);
297 #endif
298 
307 uint64_t appMemGetVirt2PhyBufPtr(uint64_t virtPtr, uint32_t heap_id);
308 
318 int32_t appMemStats(uint32_t heap_id, app_mem_stats_t *stats);
319 
327 void appMemCacheInv(void *ptr, uint32_t size);
328 
336 void appMemCacheWb(void *ptr, uint32_t size);
337 
338 
339 
347 void appMemCacheWbInv(void *ptr, uint32_t size);
348 
349 /* @} */
350 
351 #endif
352 
Heap initialization parameters.
Definition: app_mem.h:141
void * base
Definition: app_mem.h:143
void appMemCacheWbInv(void *ptr, uint32_t size)
Write back and invalidate a section of memory from cache.
int32_t appMemDeInit()
De-Init heaps for memory allocation.
int32_t appMemResetScratchHeap(uint32_t heap_id)
Reset scratch memory.
uint32_t heap_id
Definition: app_mem.h:164
Heap statistics and information.
Definition: app_mem.h:162
uint64_t appMemGetVirt2PhyBufPtr(uint64_t virtPtr, uint32_t heap_id)
Return physical ptr corresponds to a CMEM virtual ptr.
#define APP_MEM_HEAP_NAME_MAX
Max characters to use for heap name.
Definition: app_mem.h:79
static void * APP_MEM_ALIGNPTR(void *val, uint32_t align)
Align ptr value to 'align' bytes.
Definition: app_mem.h:174
void appMemCloseDmaBufFd(int32_t dmaBufFd)
Close the dmaBufFd of a CMEM buffer pointer.
int32_t appMemStats(uint32_t heap_id, app_mem_stats_t *stats)
Return heap statistics and information.
static uint32_t APP_MEM_ALIGN32(uint32_t val, uint32_t align)
Align 32b value to 'align' bytes.
Definition: app_mem.h:190
int32_t appMemTranslateDmaBufFd(uint32_t dmaBufFd, uint32_t size, uint64_t *virtPtr, uint64_t *phyPtr)
Translates a given 'dmaBufFd' to virtual and physical addresses.
int32_t appMemInit(app_mem_init_prm_t *prm)
Init heaps for memory allocation.
uint32_t appMemGetDmaBufFd(void *virPtr, volatile uint32_t *dmaBufFdOffset)
Return dmaBufFd of a CMEM buffer pointer.
void appMemCacheWb(void *ptr, uint32_t size)
Write back a section of memory from cache.
uint32_t heap_size
Definition: app_mem.h:166
void appMemCacheInv(void *ptr, uint32_t size)
Invalidate a section of memory from cache.
Memory module initialization parameters.
Definition: app_mem.h:153
uint32_t flags
Definition: app_mem.h:146
uint32_t free_size
Definition: app_mem.h:167
#define APP_MEM_HEAP_MAX
Max heaps in system.
Definition: app_mem.h:107
int32_t appMemFree(uint32_t heap_id, void *ptr, uint32_t size)
Free memory that was previously allocated.
uint32_t size
Definition: app_mem.h:145
void appMemInitPrmSetDefault(app_mem_init_prm_t *prm)
Set defaults to app_mem_init_prm_t.
static uint64_t APP_MEM_ALIGN64(uint64_t val, uint32_t align)
Align 64b value to 'align' bytes.
Definition: app_mem.h:182
void * appMemAlloc(uint32_t heap_id, uint32_t size, uint32_t align)
Alloc memory from specific heap.