1 /*
2  * Copyright (c) 2009-2023 Huawei Technologies Co., Ltd. All rights reserved.
3  *
4  * UniProton is licensed under Mulan PSL v2.
5  * You can use this software according to the terms and conditions of the Mulan PSL v2.
6  * You may obtain a copy of Mulan PSL v2 at:
7  *          http://license.coscl.org.cn/MulanPSL2
8  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
9  * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
10  * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
11  * See the Mulan PSL v2 for more details.
12  * Create: 2009-12-22
13  * Description: mem模块的模块内头文件。
14  */
15 #ifndef PRT_MEM_INTERNAL_H
16 #define PRT_MEM_INTERNAL_H
17 
18 #include "prt_mem_external.h"
19 #include "prt_attr_external.h"
20 #include "prt_lib_external.h"
21 #include "prt_cpu_external.h"
22 
23 /*
24  * 模块内宏定义
25  */
26 #define OS_MEM_ADDR_ALIGN_TYPE_TO_SIZE(size) (0x1UL << (U32)(size))
27 
28 /* 申请一个内存块 */
29 typedef void *(*MemAllocFunc)(enum MoudleId mid, U8 ptNo, U32 size);
30 
31 /* 申请size字节并返回指向已分配内存的指针,内存地址将按照alignPow动态对齐 */
32 typedef void *(*MemAllocAlignFunc)(U32 mid, U8 ptNo, U32 size, enum MemAlign alignPow);
33 
34 /* 释放一个内存块  */
35 typedef U32 (*MemFreeFunc)(void *addr);
36 
37 struct TagMemFuncLib {
38     void *addr;        /* 分区起始地址 */
39     MemAllocFunc alloc; /* 申请一个内存块 */
40     MemAllocAlignFunc allocAlign; /* 申请size字节并返回指向已分配内存的指针,内存地址将按照alignPow动态对齐 */
41     MemFreeFunc free;   /* 释放一个内存块 */
42 };
43 
44 extern struct TagMemFuncLib g_memArithAPI; /* 算法对应API */
45 
46 #endif /* PRT_MEM_INTERNAL_H */
47