1 /*
2 * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 * Description: addr
15 *
16 * Create: 2021-12-16
17 */
18
19 #include <string.h>
20 #include <los_memory.h>
21 #include <los_config.h>
22 #include <linux/kernel.h>
23
24 #ifdef HW_LITEOS_OPEN_VERSION_NUM
25 #include <securec.h>
26 #endif
27 #include "soc_osal.h"
28 #include "osal_inner.h"
29
30 // osal_gfp_flag is not valid in liteos
osal_kmalloc(unsigned long size,unsigned int osal_gfp_flag)31 void *osal_kmalloc(unsigned long size, unsigned int osal_gfp_flag)
32 {
33 osal_unused(osal_gfp_flag);
34 return LOS_MemAlloc((void*)m_aucSysMem0, size);
35 }
36
osal_kzalloc(unsigned long size,unsigned int osal_gfp_flag)37 void *osal_kzalloc(unsigned long size, unsigned int osal_gfp_flag)
38 {
39 osal_unused(osal_gfp_flag);
40 void *addr = LOS_MemAlloc((void*)m_aucSysMem0, size);
41 if (addr != NULL) {
42 memset_s(addr, size, 0, size);
43 }
44 return addr;
45 }
46
osal_kmalloc_align(unsigned int size,unsigned int osal_gfp_flag,unsigned int boundary)47 void *osal_kmalloc_align(unsigned int size, unsigned int osal_gfp_flag, unsigned int boundary)
48 {
49 osal_unused(osal_gfp_flag);
50 return LOS_MemAllocAlign((void*)m_aucSysMem0, size, boundary);
51 }
52
osal_kzalloc_align(unsigned int size,unsigned int osal_gfp_flag,unsigned int boundary)53 void *osal_kzalloc_align(unsigned int size, unsigned int osal_gfp_flag, unsigned int boundary)
54 {
55 osal_unused(osal_gfp_flag);
56 void *addr = LOS_MemAllocAlign((void*)m_aucSysMem0, size, boundary);
57 if (addr != NULL) {
58 memset_s(addr, size, 0, size);
59 }
60 return addr;
61 }
62
osal_kfree(void * addr)63 void osal_kfree(void *addr)
64 {
65 (void)LOS_MemFree((void*)m_aucSysMem0, (void*)addr);
66 }
67
osal_pool_mem_init(void * pool,unsigned int size)68 int osal_pool_mem_init(void *pool, unsigned int size)
69 {
70 unsigned int ret = LOS_MemInit(pool, size);
71 if (ret != LOS_OK) {
72 return OSAL_FAILURE;
73 }
74 return OSAL_SUCCESS;
75 }
76
osal_pool_mem_alloc(void * pool,unsigned int size)77 void *osal_pool_mem_alloc(void *pool, unsigned int size)
78 {
79 return LOS_MemAlloc(pool, size);
80 }
81
osal_pool_mem_alloc_align(void * pool,unsigned int size,unsigned int boundary)82 void *osal_pool_mem_alloc_align(void *pool, unsigned int size, unsigned int boundary)
83 {
84 return LOS_MemAllocAlign(pool, size, boundary);
85 }
86
osal_pool_mem_free(void * pool,const void * addr)87 void osal_pool_mem_free(void *pool, const void *addr)
88 {
89 (void)LOS_MemFree(pool, (void*)addr);
90 }
91
osal_pool_mem_deinit(void * pool)92 int osal_pool_mem_deinit(void *pool)
93 {
94 #ifndef TINY_KERNEL
95 #ifdef LOSCFG_MEM_MUL_POOL
96 unsigned int ret = LOS_MemDeInit(pool);
97 if (ret != LOS_OK) {
98 osal_log("LOS_MemDeInit failed! ret = %#x.\n", ret);
99 return OSAL_FAILURE;
100 }
101 #endif
102 #endif
103 return OSAL_SUCCESS;
104 }
105
osal_vmalloc(unsigned long size)106 void *osal_vmalloc(unsigned long size)
107 {
108 #ifdef HW_LITEOS_OPEN_VERSION_NUM
109 return LOS_MemAlloc((void*)m_aucSysMem0, size);
110 #else
111 return LOS_VMalloc(size);
112 #endif
113 }
114
osal_vzalloc(unsigned long size)115 void *osal_vzalloc(unsigned long size)
116 {
117 #ifdef HW_LITEOS_OPEN_VERSION_NUM
118 void *addr = LOS_MemAlloc((void*)m_aucSysMem0, size);
119 #else
120 void *addr = LOS_VMalloc(size);
121 #endif
122 if (addr != NULL) {
123 memset_s(addr, size, 0, size);
124 }
125 return addr;
126 }
127
osal_vfree(void * addr)128 void osal_vfree(void *addr)
129 {
130 #ifdef HW_LITEOS_OPEN_VERSION_NUM
131 (void)LOS_MemFree((void*)m_aucSysMem0, (void*)addr);
132 #else
133 LOS_VFree((void *)addr);
134 #endif
135 }
136
osal_ioremap(unsigned long phys_addr,unsigned long size)137 void *osal_ioremap(unsigned long phys_addr, unsigned long size)
138 {
139 #ifdef HW_LITEOS_OPEN_VERSION_NUM
140 return ioremap_nocache(phys_addr, size);
141 #else
142 return ioremap(phys_addr, size);
143 #endif
144 }
145
osal_ioremap_nocache(unsigned long phys_addr,unsigned long size)146 void *osal_ioremap_nocache(unsigned long phys_addr, unsigned long size)
147 {
148 return ioremap_nocache(phys_addr, size);
149 }
osal_ioremap_wc(unsigned long phys_addr,unsigned long size)150 void *osal_ioremap_wc(unsigned long phys_addr, unsigned long size)
151 {
152 return ioremap_nocache(phys_addr, size);
153 }
154
osal_ioremap_cached(unsigned long phys_addr,unsigned long size)155 void *osal_ioremap_cached(unsigned long phys_addr, unsigned long size)
156 {
157 return ioremap_cached(phys_addr, size);
158 }
159
osal_iounmap(void * addr,unsigned long size)160 void osal_iounmap(void *addr, unsigned long size)
161 {
162 return iounmap(addr);
163 }
164
165 /*
166 * copy success: return 0;
167 * copy fail : return remain bytes
168 */
osal_copy_from_user(void * to,const void * from,unsigned long n)169 unsigned long osal_copy_from_user(void *to, const void *from, unsigned long n)
170 {
171 if (to == NULL || from == NULL) {
172 return n;
173 }
174 #ifdef HW_LITEOS_OPEN_VERSION_NUM
175 errno_t ret = memcpy_s(to, n, from, n);
176 return (ret == EOK) ? 0 : n;
177 #else
178 int ret = LOS_CopyToKernel(to, n, from, n);
179 if (ret != 0) {
180 return n;
181 }
182 return 0;
183 #endif
184 }
185 /*
186 * copy success: return 0;
187 * copy fail : return remain bytes
188 */
osal_copy_to_user(void * to,const void * from,unsigned long n)189 unsigned long osal_copy_to_user(void *to, const void *from, unsigned long n)
190 {
191 if (to == NULL || from == NULL) {
192 return n;
193 }
194 #ifdef HW_LITEOS_OPEN_VERSION_NUM
195 errno_t ret = memcpy_s(to, n, from, n);
196 return (ret == EOK) ? 0 : n;
197 #else
198 int ret = LOS_CopyFromKernel(to, n, from, n);
199 if (ret != 0) {
200 return n;
201 }
202 return 0;
203 #endif
204 }
205
osal_phys_to_virt(unsigned long addr)206 void *osal_phys_to_virt(unsigned long addr)
207 {
208 return (void *)(UINTPTR)addr;
209 }
210
osal_virt_to_phys(const void * virt_addr)211 unsigned long osal_virt_to_phys(const void *virt_addr)
212 {
213 return (unsigned long)(UINTPTR)virt_addr;
214 }
215
osal_access_ok(int type,const void * addr,unsigned long size)216 int osal_access_ok(int type, const void *addr, unsigned long size)
217 {
218 osal_log("Do not support in liteos!\n");
219 return 1;
220 }
221