• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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