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