1 /*
2 * Copyright (c) 2022 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 */
15 #include <stdio.h>
16 #include <stdlib.h>
17 #include <string.h>
18 #include <errno.h>
19 #include <fcntl.h>
20 #include <sys/mman.h>
21 #include <sys/stat.h>
22 #include <sys/types.h>
23 #include <unistd.h>
24 #include <signal.h>
25
26 #include "hi_common.h"
27 #include "hi_comm_video.h"
28 #include "hi_comm_sys.h"
29 #include "hi_comm_svp.h"
30 #include "mpi_sys.h"
31 #include "mpi_vb.h"
32 #include "sample_comm_svp.h"
33
34 static HI_BOOL s_bSampleSvpInit = HI_FALSE;
35
SAMPLE_COMM_SVP_SysInit(HI_VOID)36 static HI_S32 SAMPLE_COMM_SVP_SysInit(HI_VOID)
37 {
38 HI_S32 s32Ret = HI_FAILURE;
39 VB_CONFIG_S struVbConf;
40
41 HI_MPI_SYS_Exit();
42 HI_MPI_VB_Exit();
43
44 (HI_VOID)memset_s(&struVbConf, sizeof(VB_CONFIG_S), 0, sizeof(VB_CONFIG_S));
45
46 struVbConf.u32MaxPoolCnt = 2; /* max pool cnt: 2 */
47 struVbConf.astCommPool[1].u64BlkSize = 768 * 576 * 2; /* vb block size: 768 * 576 * 2 */
48 struVbConf.astCommPool[1].u32BlkCnt = 1;
49
50 s32Ret = HI_MPI_VB_SetConfig((const VB_CONFIG_S *)&struVbConf);
51 SAMPLE_SVP_CHECK_EXPR_RET(s32Ret != HI_SUCCESS, s32Ret, SAMPLE_SVP_ERR_LEVEL_ERROR,
52 "Error(%#x):HI_MPI_VB_SetConf failed!\n", s32Ret);
53
54 s32Ret = HI_MPI_VB_Init();
55 SAMPLE_SVP_CHECK_EXPR_RET(s32Ret != HI_SUCCESS, s32Ret, SAMPLE_SVP_ERR_LEVEL_ERROR,
56 "Error(%#x):HI_MPI_VB_Init failed!\n", s32Ret);
57
58 s32Ret = HI_MPI_SYS_Init();
59 SAMPLE_SVP_CHECK_EXPR_RET(s32Ret != HI_SUCCESS, s32Ret, SAMPLE_SVP_ERR_LEVEL_ERROR,
60 "Error(%#x):HI_MPI_SYS_Init failed!\n", s32Ret);
61
62 return s32Ret;
63 }
64
SAMPLE_COMM_SVP_SysExit(HI_VOID)65 static HI_S32 SAMPLE_COMM_SVP_SysExit(HI_VOID)
66 {
67 HI_S32 s32Ret = HI_FAILURE;
68
69 s32Ret = HI_MPI_SYS_Exit();
70 SAMPLE_SVP_CHECK_EXPR_RET(s32Ret != HI_SUCCESS, s32Ret, SAMPLE_SVP_ERR_LEVEL_ERROR,
71 "Error(%#x):HI_MPI_SYS_Exit failed!\n", s32Ret);
72
73 s32Ret = HI_MPI_VB_Exit();
74 SAMPLE_SVP_CHECK_EXPR_RET(s32Ret != HI_SUCCESS, s32Ret, SAMPLE_SVP_ERR_LEVEL_ERROR,
75 "Error(%#x):HI_MPI_VB_Exit failed!\n", s32Ret);
76
77 return HI_SUCCESS;
78 }
79
SAMPLE_COMM_SVP_CheckSysInit(HI_VOID)80 HI_S32 SAMPLE_COMM_SVP_CheckSysInit(HI_VOID)
81 {
82 if (HI_FALSE == s_bSampleSvpInit) {
83 if (SAMPLE_COMM_SVP_SysInit()) {
84 SAMPLE_SVP_TRACE(SAMPLE_SVP_ERR_LEVEL_ERROR, "Svp mpi init failed!\n");
85 return HI_FAILURE;
86 }
87 s_bSampleSvpInit = HI_TRUE;
88 }
89
90 SAMPLE_SVP_TRACE(SAMPLE_SVP_ERR_LEVEL_DEBUG, "Svp mpi init ok!\n");
91 return HI_SUCCESS;
92 }
93
SAMPLE_COMM_SVP_CheckSysExit(HI_VOID)94 HI_VOID SAMPLE_COMM_SVP_CheckSysExit(HI_VOID)
95 {
96 if (s_bSampleSvpInit) {
97 SAMPLE_COMM_SVP_SysExit();
98 s_bSampleSvpInit = HI_FALSE;
99 }
100
101 SAMPLE_SVP_TRACE(SAMPLE_SVP_ERR_LEVEL_DEBUG, "Svp mpi exit ok!\n");
102 }
103
SAMPLE_COMM_SVP_Align(HI_U32 u32Size,HI_U16 u16Align)104 HI_U32 SAMPLE_COMM_SVP_Align(HI_U32 u32Size, HI_U16 u16Align)
105 {
106 if (u16Align == 0) {
107 printf("Divisor u16Align cannot be 0!\n");
108 return HI_FAILURE;
109 }
110 HI_U32 u32Stride = u32Size + (u16Align - u32Size % u16Align) % u16Align;
111 return u32Stride;
112 }
113
SAMPLE_COMM_SVP_CreateImage(SVP_IMAGE_S * pstImg,SVP_IMAGE_TYPE_E enType,HI_U32 u32Width,HI_U32 u32Height,HI_U32 u32AddrOffset)114 HI_S32 SAMPLE_COMM_SVP_CreateImage(SVP_IMAGE_S *pstImg, SVP_IMAGE_TYPE_E enType, HI_U32 u32Width, HI_U32 u32Height,
115 HI_U32 u32AddrOffset)
116 {
117 HI_U32 u32Size = 0;
118 HI_S32 s32Ret = HI_FAILURE;
119
120 SAMPLE_SVP_CHECK_EXPR_RET(pstImg == HI_NULL, s32Ret, SAMPLE_SVP_ERR_LEVEL_ERROR, "Error(%#x):pstImg is NULL!\n",
121 s32Ret);
122
123 pstImg->enType = enType;
124 pstImg->u32Width = u32Width;
125 pstImg->u32Height = u32Height;
126 pstImg->au32Stride[0] = SAMPLE_COMM_SVP_Align(pstImg->u32Width, SAMPLE_SVP_ALIGN_16);
127
128 switch (enType) {
129 case SVP_IMAGE_TYPE_U8C1:
130 case SVP_IMAGE_TYPE_S8C1: {
131 u32Size = pstImg->au32Stride[0] * pstImg->u32Height + u32AddrOffset;
132 s32Ret =
133 HI_MPI_SYS_MmzAlloc(&pstImg->au64PhyAddr[0], (void **)&pstImg->au64VirAddr[0], NULL, HI_NULL, u32Size);
134 SAMPLE_SVP_CHECK_EXPR_RET(s32Ret != HI_SUCCESS, s32Ret, SAMPLE_SVP_ERR_LEVEL_ERROR,
135 "Error(%#x):HI_MPI_SYS_MmzAlloc failed!\n", s32Ret);
136 pstImg->au64PhyAddr[0] += u32AddrOffset;
137 pstImg->au64VirAddr[0] += u32AddrOffset;
138 break;
139 }
140 case SVP_IMAGE_TYPE_YUV420SP: {
141 u32Size =
142 pstImg->au32Stride[0] * pstImg->u32Height * 3 / 2 + u32AddrOffset; /* YUV420SP: stride * h * 3 / 2 */
143 s32Ret =
144 HI_MPI_SYS_MmzAlloc(&pstImg->au64PhyAddr[0], (void **)&pstImg->au64VirAddr[0], NULL, HI_NULL, u32Size);
145 SAMPLE_SVP_CHECK_EXPR_RET(s32Ret != HI_SUCCESS, s32Ret, SAMPLE_SVP_ERR_LEVEL_ERROR,
146 "Error(%#x):HI_MPI_SYS_MmzAlloc failed!\n", s32Ret);
147 pstImg->au64PhyAddr[0] += u32AddrOffset;
148 pstImg->au64VirAddr[0] += u32AddrOffset;
149 pstImg->au32Stride[1] = pstImg->au32Stride[0];
150 pstImg->au64PhyAddr[1] = pstImg->au64PhyAddr[0] + pstImg->au32Stride[0] * pstImg->u32Height;
151 pstImg->au64VirAddr[1] = pstImg->au64VirAddr[0] + pstImg->au32Stride[0] * pstImg->u32Height;
152 break;
153 }
154 case SVP_IMAGE_TYPE_YUV422SP: {
155 u32Size = pstImg->au32Stride[0] * pstImg->u32Height * 2 + u32AddrOffset; /* YUV422: stride * h * 2 */
156 s32Ret =
157 HI_MPI_SYS_MmzAlloc(&pstImg->au64PhyAddr[0], (void **)&pstImg->au64VirAddr[0], NULL, HI_NULL, u32Size);
158 SAMPLE_SVP_CHECK_EXPR_RET(s32Ret != HI_SUCCESS, s32Ret, SAMPLE_SVP_ERR_LEVEL_ERROR,
159 "Error(%#x):HI_MPI_SYS_MmzAlloc failed!\n", s32Ret);
160 pstImg->au64PhyAddr[0] += u32AddrOffset;
161 pstImg->au64VirAddr[0] += u32AddrOffset;
162 pstImg->au32Stride[1] = pstImg->au32Stride[0];
163 pstImg->au64PhyAddr[1] = pstImg->au64PhyAddr[0] + pstImg->au32Stride[0] * pstImg->u32Height;
164 pstImg->au64VirAddr[1] = pstImg->au64VirAddr[0] + pstImg->au32Stride[0] * pstImg->u32Height;
165 break;
166 }
167 case SVP_IMAGE_TYPE_YUV420P: {
168 pstImg->au32Stride[1] =
169 SAMPLE_COMM_SVP_Align(pstImg->u32Width / 2, SAMPLE_SVP_ALIGN_16); /* [1] u_stride, width / 2 */
170 pstImg->au32Stride[2] = pstImg->au32Stride[1]; /* [2] v_stride */
171
172 u32Size =
173 pstImg->au32Stride[0] * pstImg->u32Height + pstImg->au32Stride[1] * pstImg->u32Height + u32AddrOffset;
174 s32Ret =
175 HI_MPI_SYS_MmzAlloc(&pstImg->au64PhyAddr[0], (void **)&pstImg->au64VirAddr[0], NULL, HI_NULL, u32Size);
176 SAMPLE_SVP_CHECK_EXPR_RET(s32Ret != HI_SUCCESS, s32Ret, SAMPLE_SVP_ERR_LEVEL_ERROR,
177 "Error(%#x):HI_MPI_SYS_MmzAlloc failed!\n", s32Ret);
178
179 pstImg->au64PhyAddr[0] += u32AddrOffset; /* [0] y */
180 pstImg->au64VirAddr[0] += u32AddrOffset; /* [0] y */
181 pstImg->au64PhyAddr[1] = pstImg->au64PhyAddr[0] + pstImg->au32Stride[0] * pstImg->u32Height; /* [1] u */
182 pstImg->au64VirAddr[1] = pstImg->au64VirAddr[0] + pstImg->au32Stride[0] * pstImg->u32Height; /* [1] u */
183 pstImg->au64PhyAddr[2] = pstImg->au64PhyAddr[1] + pstImg->au32Stride[1] * pstImg->u32Height / 2; /* [2] v */
184 pstImg->au64VirAddr[2] = pstImg->au64VirAddr[1] + pstImg->au32Stride[1] * pstImg->u32Height / 2; /* [2] v */
185 break;
186 }
187 case SVP_IMAGE_TYPE_YUV422P: {
188 pstImg->au32Stride[1] =
189 SAMPLE_COMM_SVP_Align(pstImg->u32Width / 2, SAMPLE_SVP_ALIGN_16); /* [1] u_stride, width / 2 */
190 pstImg->au32Stride[2] = pstImg->au32Stride[1]; /* [2] v_stride */
191 u32Size = pstImg->au32Stride[0] * pstImg->u32Height + pstImg->au32Stride[1] * pstImg->u32Height * 2 +
192 u32AddrOffset;
193 s32Ret =
194 HI_MPI_SYS_MmzAlloc(&pstImg->au64PhyAddr[0], (void **)&pstImg->au64VirAddr[0], NULL, HI_NULL, u32Size);
195 SAMPLE_SVP_CHECK_EXPR_RET(s32Ret != HI_SUCCESS, s32Ret, SAMPLE_SVP_ERR_LEVEL_ERROR,
196 "Error(%#x):HI_MPI_SYS_MmzAlloc failed!\n", s32Ret);
197
198 pstImg->au64PhyAddr[0] += u32AddrOffset;
199 pstImg->au64VirAddr[0] += u32AddrOffset;
200 pstImg->au64PhyAddr[1] = pstImg->au64PhyAddr[0] + pstImg->au32Stride[0] * pstImg->u32Height;
201 pstImg->au64VirAddr[1] = pstImg->au64VirAddr[0] + pstImg->au32Stride[0] * pstImg->u32Height;
202 pstImg->au64PhyAddr[2] = pstImg->au64PhyAddr[1] + pstImg->au32Stride[1] * pstImg->u32Height; /* [2] v */
203 pstImg->au64VirAddr[2] = pstImg->au64VirAddr[1] + pstImg->au32Stride[1] * pstImg->u32Height; /* [2] v */
204 break;
205 }
206 case SVP_IMAGE_TYPE_S8C2_PACKAGE: {
207 u32Size = pstImg->au32Stride[0] * pstImg->u32Height * 2 + u32AddrOffset; /* P422: stride * h * 2 */
208 s32Ret =
209 HI_MPI_SYS_MmzAlloc(&pstImg->au64PhyAddr[0], (void **)&pstImg->au64VirAddr[0], NULL, HI_NULL, u32Size);
210 SAMPLE_SVP_CHECK_EXPR_RET(s32Ret != HI_SUCCESS, s32Ret, SAMPLE_SVP_ERR_LEVEL_ERROR,
211 "Error(%#x):HI_MPI_SYS_MmzAlloc failed!\n", s32Ret);
212
213 pstImg->au64PhyAddr[0] += u32AddrOffset;
214 pstImg->au64VirAddr[0] += u32AddrOffset;
215 pstImg->au32Stride[1] = pstImg->au32Stride[0];
216 pstImg->au64VirAddr[1] = pstImg->au64VirAddr[0] + 1;
217 pstImg->au64PhyAddr[1] = pstImg->au64PhyAddr[0] + 1;
218 break;
219 }
220 case SVP_IMAGE_TYPE_S8C2_PLANAR: {
221 u32Size = pstImg->au32Stride[0] * pstImg->u32Height * 2 + u32AddrOffset; /* S8C2: stride * h * 2 */
222 s32Ret =
223 HI_MPI_SYS_MmzAlloc(&pstImg->au64PhyAddr[0], (void **)&pstImg->au64VirAddr[0], NULL, HI_NULL, u32Size);
224 SAMPLE_SVP_CHECK_EXPR_RET(s32Ret != HI_SUCCESS, s32Ret, SAMPLE_SVP_ERR_LEVEL_ERROR,
225 "Error(%#x):HI_MPI_SYS_MmzAlloc failed!\n", s32Ret);
226
227 pstImg->au64PhyAddr[0] += u32AddrOffset;
228 pstImg->au64VirAddr[0] += u32AddrOffset;
229 pstImg->au32Stride[1] = pstImg->au32Stride[0];
230 pstImg->au64VirAddr[1] = pstImg->au64VirAddr[0] + pstImg->au32Stride[0] * pstImg->u32Height;
231 pstImg->au64PhyAddr[1] = pstImg->au64PhyAddr[0] + pstImg->au32Stride[0] * pstImg->u32Height;
232 break;
233 }
234 case SVP_IMAGE_TYPE_S16C1:
235 case SVP_IMAGE_TYPE_U16C1: {
236 u32Size = pstImg->au32Stride[0] * pstImg->u32Height * sizeof(HI_U16) + u32AddrOffset;
237 s32Ret =
238 HI_MPI_SYS_MmzAlloc(&pstImg->au64PhyAddr[0], (void **)&pstImg->au64VirAddr[0], NULL, HI_NULL, u32Size);
239 SAMPLE_SVP_CHECK_EXPR_RET(s32Ret != HI_SUCCESS, s32Ret, SAMPLE_SVP_ERR_LEVEL_ERROR,
240 "Error(%#x):HI_MPI_SYS_MmzAlloc failed!\n", s32Ret);
241 pstImg->au64PhyAddr[0] += u32AddrOffset;
242 pstImg->au64VirAddr[0] += u32AddrOffset;
243 break;
244 }
245 case SVP_IMAGE_TYPE_U8C3_PACKAGE: {
246 u32Size = pstImg->au32Stride[0] * pstImg->u32Height * 3 + u32AddrOffset; /* U8C3: stride * h * 3 */
247 s32Ret =
248 HI_MPI_SYS_MmzAlloc(&pstImg->au64PhyAddr[0], (void **)&pstImg->au64VirAddr[0], NULL, HI_NULL, u32Size);
249 SAMPLE_SVP_CHECK_EXPR_RET(s32Ret != HI_SUCCESS, s32Ret, SAMPLE_SVP_ERR_LEVEL_ERROR,
250 "Error(%#x):HI_MPI_SYS_MmzAlloc failed!\n", s32Ret);
251
252 pstImg->au64PhyAddr[0] += u32AddrOffset; /* [0] y_phy_addr */
253 pstImg->au64VirAddr[0] += u32AddrOffset; /* [0] y_vir_addr */
254 pstImg->au32Stride[1] = pstImg->au32Stride[0]; /* [1] u_stride */
255 pstImg->au32Stride[2] = pstImg->au32Stride[0]; /* [2] v_stride */
256 pstImg->au64VirAddr[1] = pstImg->au64VirAddr[0] + 1; /* [1] u_vir_addr */
257 pstImg->au64VirAddr[2] = pstImg->au64VirAddr[1] + 1; /* [2] v_vir_addr */
258 pstImg->au64PhyAddr[1] = pstImg->au64PhyAddr[0] + 1; /* [1] u_phy_addr */
259 pstImg->au64PhyAddr[2] = pstImg->au64PhyAddr[1] + 1; /* [2] v_phy_addr */
260 break;
261 }
262 case SVP_IMAGE_TYPE_U8C3_PLANAR: {
263 u32Size = pstImg->au32Stride[0] * pstImg->u32Height * 3 + u32AddrOffset; /* U8C3: stride * h * 3 */
264 s32Ret =
265 HI_MPI_SYS_MmzAlloc(&pstImg->au64PhyAddr[0], (void **)&pstImg->au64VirAddr[0], NULL, HI_NULL, u32Size);
266 SAMPLE_SVP_CHECK_EXPR_RET(s32Ret != HI_SUCCESS, s32Ret, SAMPLE_SVP_ERR_LEVEL_ERROR,
267 "Error(%#x):HI_MPI_SYS_MmzAlloc failed!\n", s32Ret);
268
269 pstImg->au64PhyAddr[0] += u32AddrOffset; /* [0] y_phy_addr */
270 pstImg->au64VirAddr[0] += u32AddrOffset; /* [0] y_vir_addr */
271 pstImg->au32Stride[1] = pstImg->au32Stride[0]; /* [1] u_stride */
272 pstImg->au32Stride[2] = pstImg->au32Stride[0]; /* [2] v_stride */
273 pstImg->au64VirAddr[1] = /* [1] u_vir_addr */
274 pstImg->au64VirAddr[0] + (HI_U64)pstImg->au32Stride[0] * (HI_U64)pstImg->u32Height;
275 pstImg->au64VirAddr[2] = /* [2] v_vir_addr */
276 pstImg->au64VirAddr[1] + (HI_U64)pstImg->au32Stride[1] * (HI_U64)pstImg->u32Height;
277 pstImg->au64PhyAddr[1] = /* [1] u_phy_addr */
278 pstImg->au64PhyAddr[0] + (HI_U64)pstImg->au32Stride[0] * (HI_U64)pstImg->u32Height;
279 pstImg->au64PhyAddr[2] = /* [2] v_phy_addr */
280 pstImg->au64PhyAddr[1] + (HI_U64)pstImg->au32Stride[1] * (HI_U64)pstImg->u32Height;
281 break;
282 }
283 case SVP_IMAGE_TYPE_S32C1:
284 case SVP_IMAGE_TYPE_U32C1: {
285 u32Size = pstImg->au32Stride[0] * pstImg->u32Height * sizeof(HI_U32) + u32AddrOffset;
286 s32Ret =
287 HI_MPI_SYS_MmzAlloc(&pstImg->au64PhyAddr[0], (void **)&pstImg->au64VirAddr[0], NULL, HI_NULL, u32Size);
288 SAMPLE_SVP_CHECK_EXPR_RET(s32Ret != HI_SUCCESS, s32Ret, SAMPLE_SVP_ERR_LEVEL_ERROR,
289 "Error(%#x):HI_MPI_SYS_MmzAlloc failed!\n", s32Ret);
290 pstImg->au64PhyAddr[0] += u32AddrOffset;
291 pstImg->au64VirAddr[0] += u32AddrOffset;
292 break;
293 }
294 case SVP_IMAGE_TYPE_S64C1:
295 case SVP_IMAGE_TYPE_U64C1: {
296 u32Size = pstImg->au32Stride[0] * pstImg->u32Height * sizeof(HI_U64) + u32AddrOffset;
297 s32Ret =
298 HI_MPI_SYS_MmzAlloc(&pstImg->au64PhyAddr[0], (void **)&pstImg->au64VirAddr[0], NULL, HI_NULL, u32Size);
299 SAMPLE_SVP_CHECK_EXPR_RET(s32Ret != HI_SUCCESS, s32Ret, SAMPLE_SVP_ERR_LEVEL_ERROR,
300 "Error(%#x):HI_MPI_SYS_MmzAlloc failed!\n", s32Ret);
301
302 pstImg->au64PhyAddr[0] += u32AddrOffset;
303 pstImg->au64VirAddr[0] += u32AddrOffset;
304 break;
305 }
306 default:
307 break;
308 }
309
310 return HI_SUCCESS;
311 }
312
SAMPLE_COMM_SVP_DestroyImage(SVP_IMAGE_S * pstImg,HI_U32 u32AddrOffset)313 HI_VOID SAMPLE_COMM_SVP_DestroyImage(SVP_IMAGE_S *pstImg, HI_U32 u32AddrOffset)
314 {
315 if (pstImg != NULL) {
316 if ((pstImg->au64VirAddr[0] != 0) && (pstImg->au64PhyAddr[0] != 0)) {
317 (HI_VOID)HI_MPI_SYS_MmzFree(pstImg->au64PhyAddr[0] - u32AddrOffset,
318 (void *)(HI_UINTPTR_T)(pstImg->au64VirAddr[0] - u32AddrOffset));
319 }
320
321 (HI_VOID)memset_s(pstImg, sizeof(*pstImg), 0, sizeof(*pstImg));
322 }
323 }
324
SAMPLE_COMM_SVP_CreateMemInfo(SVP_MEM_INFO_S * pstMemInfo,HI_U32 u32Size,HI_U32 u32AddrOffset)325 HI_S32 SAMPLE_COMM_SVP_CreateMemInfo(SVP_MEM_INFO_S *pstMemInfo, HI_U32 u32Size, HI_U32 u32AddrOffset)
326 {
327 HI_S32 s32Ret = HI_FAILURE;
328 HI_U32 u32SizeTmp;
329
330 SAMPLE_SVP_CHECK_EXPR_RET(pstMemInfo == HI_NULL, s32Ret, SAMPLE_SVP_ERR_LEVEL_ERROR,
331 "Error(%#x):pstMemInfo is NULL!\n", s32Ret);
332
333 u32SizeTmp = u32Size + u32AddrOffset;
334 pstMemInfo->u32Size = u32Size;
335 s32Ret = HI_MPI_SYS_MmzAlloc(&pstMemInfo->u64PhyAddr, (void **)&pstMemInfo->u64VirAddr, NULL, HI_NULL, u32SizeTmp);
336 SAMPLE_SVP_CHECK_EXPR_RET(s32Ret != HI_SUCCESS, s32Ret, SAMPLE_SVP_ERR_LEVEL_ERROR,
337 "Error(%#x):HI_MPI_SYS_MmzAlloc failed!\n", s32Ret);
338
339 pstMemInfo->u64PhyAddr += u32AddrOffset;
340 pstMemInfo->u64VirAddr += u32AddrOffset;
341
342 return s32Ret;
343 }
344
SAMPLE_COMM_SVP_DestroyMemInfo(SVP_MEM_INFO_S * pstMemInfo,HI_U32 u32AddrOffset)345 HI_VOID SAMPLE_COMM_SVP_DestroyMemInfo(SVP_MEM_INFO_S *pstMemInfo, HI_U32 u32AddrOffset)
346 {
347 if (pstMemInfo != NULL) {
348 if ((pstMemInfo->u64VirAddr != 0) && (pstMemInfo->u64PhyAddr != 0)) {
349 (HI_VOID)HI_MPI_SYS_MmzFree(pstMemInfo->u64PhyAddr - u32AddrOffset,
350 (HI_VOID *)(HI_UINTPTR_T)(pstMemInfo->u64VirAddr - u32AddrOffset));
351 }
352 (HI_VOID)memset_s(pstMemInfo, sizeof(*pstMemInfo), 0, sizeof(*pstMemInfo));
353 }
354 }
355
SAMPLE_COMM_SVP_MallocMem(HI_CHAR * pszMmb,HI_CHAR * pszZone,HI_U64 * pu64PhyAddr,HI_VOID ** ppvVirAddr,HI_U32 u32Size)356 HI_S32 SAMPLE_COMM_SVP_MallocMem(HI_CHAR *pszMmb, HI_CHAR *pszZone, HI_U64 *pu64PhyAddr, HI_VOID **ppvVirAddr,
357 HI_U32 u32Size)
358 {
359 return HI_MPI_SYS_MmzAlloc(pu64PhyAddr, ppvVirAddr, pszMmb, pszZone, u32Size);
360 }
361
SAMPLE_COMM_SVP_MallocCached(HI_CHAR * pszMmb,HI_CHAR * pszZone,HI_U64 * pu64PhyAddr,HI_VOID ** ppvVirAddr,HI_U32 u32Size)362 HI_S32 SAMPLE_COMM_SVP_MallocCached(HI_CHAR *pszMmb, HI_CHAR *pszZone, HI_U64 *pu64PhyAddr, HI_VOID **ppvVirAddr,
363 HI_U32 u32Size)
364 {
365 return HI_MPI_SYS_MmzAlloc(pu64PhyAddr, ppvVirAddr, pszMmb, pszZone, u32Size);
366 }
367
SAMPLE_COMM_SVP_FlushCache(HI_U64 u64PhyAddr,HI_VOID * pvVirAddr,HI_U32 u32Size)368 HI_S32 SAMPLE_COMM_SVP_FlushCache(HI_U64 u64PhyAddr, HI_VOID *pvVirAddr, HI_U32 u32Size)
369 {
370 return HI_MPI_SYS_MmzFlushCache(u64PhyAddr, pvVirAddr, u32Size);
371 }
372