1*437bfbebSnyanmisaka /*
2*437bfbebSnyanmisaka * Copyright 2015 Rockchip Electronics Co. LTD
3*437bfbebSnyanmisaka *
4*437bfbebSnyanmisaka * Licensed under the Apache License, Version 2.0 (the "License");
5*437bfbebSnyanmisaka * you may not use this file except in compliance with the License.
6*437bfbebSnyanmisaka * You may obtain a copy of the License at
7*437bfbebSnyanmisaka *
8*437bfbebSnyanmisaka * http://www.apache.org/licenses/LICENSE-2.0
9*437bfbebSnyanmisaka *
10*437bfbebSnyanmisaka * Unless required by applicable law or agreed to in writing, software
11*437bfbebSnyanmisaka * distributed under the License is distributed on an "AS IS" BASIS,
12*437bfbebSnyanmisaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*437bfbebSnyanmisaka * See the License for the specific language governing permissions and
14*437bfbebSnyanmisaka * limitations under the License.
15*437bfbebSnyanmisaka */
16*437bfbebSnyanmisaka
17*437bfbebSnyanmisaka #define MODULE_TAG "vpu"
18*437bfbebSnyanmisaka
19*437bfbebSnyanmisaka #include <sys/ioctl.h>
20*437bfbebSnyanmisaka #include <errno.h>
21*437bfbebSnyanmisaka #include <string.h>
22*437bfbebSnyanmisaka
23*437bfbebSnyanmisaka #include "vpu.h"
24*437bfbebSnyanmisaka #include "rk_mpi.h"
25*437bfbebSnyanmisaka
26*437bfbebSnyanmisaka #include "mpp_env.h"
27*437bfbebSnyanmisaka #include "mpp_debug.h"
28*437bfbebSnyanmisaka #include "mpp_common.h"
29*437bfbebSnyanmisaka #include "mpp_platform.h"
30*437bfbebSnyanmisaka
31*437bfbebSnyanmisaka #include "mpp_service.h"
32*437bfbebSnyanmisaka #include "vcodec_service.h"
33*437bfbebSnyanmisaka
34*437bfbebSnyanmisaka #define VPU_EXTRA_INFO_SIZE 12
35*437bfbebSnyanmisaka #define VPU_EXTRA_INFO_MAGIC (0x4C4A46)
36*437bfbebSnyanmisaka #define VPU_MPP_FLAGS_MULTI_MSG (0x00000001)
37*437bfbebSnyanmisaka #define VPU_MPP_FLAGS_LAST_MSG (0x00000002)
38*437bfbebSnyanmisaka
39*437bfbebSnyanmisaka #define MPX_PATCH_NUM 16
40*437bfbebSnyanmisaka
41*437bfbebSnyanmisaka typedef struct VpuPatchInfo_t {
42*437bfbebSnyanmisaka RK_U32 reg_idx;
43*437bfbebSnyanmisaka RK_U32 offset;
44*437bfbebSnyanmisaka } VpuPatchInfo;
45*437bfbebSnyanmisaka
46*437bfbebSnyanmisaka typedef struct VpuExtraInfo_t {
47*437bfbebSnyanmisaka RK_U32 magic; // Fix magic value 0x4C4A46
48*437bfbebSnyanmisaka RK_U32 count; // valid patch info count
49*437bfbebSnyanmisaka VpuPatchInfo patchs[MPX_PATCH_NUM];
50*437bfbebSnyanmisaka } VpuExtraInfo;
51*437bfbebSnyanmisaka
52*437bfbebSnyanmisaka typedef struct VPUReq {
53*437bfbebSnyanmisaka RK_U32 *req;
54*437bfbebSnyanmisaka RK_U32 size;
55*437bfbebSnyanmisaka } VPUReq_t;
56*437bfbebSnyanmisaka
57*437bfbebSnyanmisaka static RK_U32 vpu_debug = 0;
58*437bfbebSnyanmisaka
59*437bfbebSnyanmisaka /* 0 original version, > 1 for others version */
60*437bfbebSnyanmisaka static RK_S32 ioctl_version = 0;
61*437bfbebSnyanmisaka
vpu_api_set_client_type(int dev,RK_S32 client_type)62*437bfbebSnyanmisaka static RK_S32 vpu_api_set_client_type(int dev, RK_S32 client_type)
63*437bfbebSnyanmisaka {
64*437bfbebSnyanmisaka static RK_S32 vpu_api_ioctl_version = -1;
65*437bfbebSnyanmisaka RK_S32 ret;
66*437bfbebSnyanmisaka
67*437bfbebSnyanmisaka if (ioctl_version > 0) {
68*437bfbebSnyanmisaka MppReqV1 mpp_req;
69*437bfbebSnyanmisaka RK_U32 vcodec_type;
70*437bfbebSnyanmisaka RK_U32 client_data;
71*437bfbebSnyanmisaka
72*437bfbebSnyanmisaka vcodec_type = mpp_get_vcodec_type();
73*437bfbebSnyanmisaka
74*437bfbebSnyanmisaka switch (client_type) {
75*437bfbebSnyanmisaka case VPU_ENC:
76*437bfbebSnyanmisaka if (vcodec_type & HAVE_VDPU1)
77*437bfbebSnyanmisaka client_data = VPU_CLIENT_VEPU1;
78*437bfbebSnyanmisaka else if (vcodec_type & HAVE_VDPU2)
79*437bfbebSnyanmisaka client_data = VPU_CLIENT_VEPU2;
80*437bfbebSnyanmisaka break;
81*437bfbebSnyanmisaka default:
82*437bfbebSnyanmisaka break;
83*437bfbebSnyanmisaka }
84*437bfbebSnyanmisaka
85*437bfbebSnyanmisaka mpp_req.cmd = MPP_CMD_INIT_CLIENT_TYPE;
86*437bfbebSnyanmisaka mpp_req.flag = 0;
87*437bfbebSnyanmisaka mpp_req.size = sizeof(client_data);
88*437bfbebSnyanmisaka mpp_req.offset = 0;
89*437bfbebSnyanmisaka mpp_req.data_ptr = REQ_DATA_PTR(&client_data);
90*437bfbebSnyanmisaka ret = (RK_S32)ioctl(dev, MPP_IOC_CFG_V1, &mpp_req);
91*437bfbebSnyanmisaka } else {
92*437bfbebSnyanmisaka if (vpu_api_ioctl_version < 0) {
93*437bfbebSnyanmisaka ret = ioctl(dev, VPU_IOC_SET_CLIENT_TYPE, client_type);
94*437bfbebSnyanmisaka if (!ret) {
95*437bfbebSnyanmisaka vpu_api_ioctl_version = 0;
96*437bfbebSnyanmisaka } else {
97*437bfbebSnyanmisaka ret = ioctl(dev, VPU_IOC_SET_CLIENT_TYPE_U32, client_type);
98*437bfbebSnyanmisaka if (!ret)
99*437bfbebSnyanmisaka vpu_api_ioctl_version = 1;
100*437bfbebSnyanmisaka }
101*437bfbebSnyanmisaka
102*437bfbebSnyanmisaka if (ret)
103*437bfbebSnyanmisaka mpp_err_f("can not find valid client type ioctl\n");
104*437bfbebSnyanmisaka
105*437bfbebSnyanmisaka mpp_assert(ret == 0);
106*437bfbebSnyanmisaka } else {
107*437bfbebSnyanmisaka RK_U32 cmd = (vpu_api_ioctl_version == 0) ?
108*437bfbebSnyanmisaka (VPU_IOC_SET_CLIENT_TYPE) :
109*437bfbebSnyanmisaka (VPU_IOC_SET_CLIENT_TYPE_U32);
110*437bfbebSnyanmisaka
111*437bfbebSnyanmisaka ret = ioctl(dev, cmd, client_type);
112*437bfbebSnyanmisaka }
113*437bfbebSnyanmisaka }
114*437bfbebSnyanmisaka
115*437bfbebSnyanmisaka if (ret)
116*437bfbebSnyanmisaka mpp_err_f("set client type failed ret %d errno %d\n", ret, errno);
117*437bfbebSnyanmisaka
118*437bfbebSnyanmisaka return ret;
119*437bfbebSnyanmisaka }
120*437bfbebSnyanmisaka
121*437bfbebSnyanmisaka
VPUClientInit(VPU_CLIENT_TYPE type)122*437bfbebSnyanmisaka int VPUClientInit(VPU_CLIENT_TYPE type)
123*437bfbebSnyanmisaka {
124*437bfbebSnyanmisaka int ret;
125*437bfbebSnyanmisaka int fd;
126*437bfbebSnyanmisaka const char *path;
127*437bfbebSnyanmisaka MppCtxType ctx_type;
128*437bfbebSnyanmisaka MppCodingType coding = MPP_VIDEO_CodingAutoDetect;
129*437bfbebSnyanmisaka
130*437bfbebSnyanmisaka switch (type) {
131*437bfbebSnyanmisaka case VPU_DEC_HEVC:
132*437bfbebSnyanmisaka coding = MPP_VIDEO_CodingHEVC;
133*437bfbebSnyanmisaka ctx_type = MPP_CTX_DEC;
134*437bfbebSnyanmisaka type = VPU_DEC;
135*437bfbebSnyanmisaka break;
136*437bfbebSnyanmisaka case VPU_DEC_AVSPLUS:
137*437bfbebSnyanmisaka coding = MPP_VIDEO_CodingAVSPLUS;
138*437bfbebSnyanmisaka ctx_type = MPP_CTX_DEC;
139*437bfbebSnyanmisaka type = VPU_DEC;
140*437bfbebSnyanmisaka break;
141*437bfbebSnyanmisaka case VPU_DEC_RKV:
142*437bfbebSnyanmisaka type = VPU_DEC;
143*437bfbebSnyanmisaka ctx_type = MPP_CTX_DEC;
144*437bfbebSnyanmisaka break;
145*437bfbebSnyanmisaka case VPU_DEC:
146*437bfbebSnyanmisaka case VPU_DEC_PP:
147*437bfbebSnyanmisaka case VPU_PP:
148*437bfbebSnyanmisaka ctx_type = MPP_CTX_DEC;
149*437bfbebSnyanmisaka break;
150*437bfbebSnyanmisaka case VPU_ENC:
151*437bfbebSnyanmisaka case VPU_ENC_RKV:
152*437bfbebSnyanmisaka ctx_type = MPP_CTX_ENC;
153*437bfbebSnyanmisaka break;
154*437bfbebSnyanmisaka default:
155*437bfbebSnyanmisaka return -1;
156*437bfbebSnyanmisaka break;
157*437bfbebSnyanmisaka }
158*437bfbebSnyanmisaka
159*437bfbebSnyanmisaka path = mpp_get_vcodec_dev_name(ctx_type, coding);
160*437bfbebSnyanmisaka fd = open(path, O_RDWR | O_CLOEXEC);
161*437bfbebSnyanmisaka
162*437bfbebSnyanmisaka mpp_env_get_u32("vpu_debug", &vpu_debug, 0);
163*437bfbebSnyanmisaka
164*437bfbebSnyanmisaka ioctl_version = mpp_get_ioctl_version();
165*437bfbebSnyanmisaka
166*437bfbebSnyanmisaka if (fd == -1) {
167*437bfbebSnyanmisaka mpp_err_f("failed to open %s, errno = %d, error msg: %s\n",
168*437bfbebSnyanmisaka path, errno, strerror(errno));
169*437bfbebSnyanmisaka return -1;
170*437bfbebSnyanmisaka }
171*437bfbebSnyanmisaka
172*437bfbebSnyanmisaka ret = vpu_api_set_client_type(fd, type);
173*437bfbebSnyanmisaka if (ret) {
174*437bfbebSnyanmisaka return -2;
175*437bfbebSnyanmisaka }
176*437bfbebSnyanmisaka
177*437bfbebSnyanmisaka return fd;
178*437bfbebSnyanmisaka }
179*437bfbebSnyanmisaka
VPUClientRelease(int socket)180*437bfbebSnyanmisaka RK_S32 VPUClientRelease(int socket)
181*437bfbebSnyanmisaka {
182*437bfbebSnyanmisaka int fd = socket;
183*437bfbebSnyanmisaka if (fd > 0) {
184*437bfbebSnyanmisaka close(fd);
185*437bfbebSnyanmisaka }
186*437bfbebSnyanmisaka return VPU_SUCCESS;
187*437bfbebSnyanmisaka }
188*437bfbebSnyanmisaka
VPUClientSendReg(int socket,RK_U32 * regs,RK_U32 nregs)189*437bfbebSnyanmisaka RK_S32 VPUClientSendReg(int socket, RK_U32 *regs, RK_U32 nregs)
190*437bfbebSnyanmisaka {
191*437bfbebSnyanmisaka int fd = socket;
192*437bfbebSnyanmisaka RK_S32 ret;
193*437bfbebSnyanmisaka VPUReq_t req;
194*437bfbebSnyanmisaka
195*437bfbebSnyanmisaka if (vpu_debug) {
196*437bfbebSnyanmisaka RK_U32 i;
197*437bfbebSnyanmisaka
198*437bfbebSnyanmisaka for (i = 0; i < nregs; i++)
199*437bfbebSnyanmisaka mpp_log("set reg[%03d]: %08x\n", i, regs[i]);
200*437bfbebSnyanmisaka }
201*437bfbebSnyanmisaka
202*437bfbebSnyanmisaka if (ioctl_version > 0) {
203*437bfbebSnyanmisaka MppReqV1 reqs[3];
204*437bfbebSnyanmisaka RK_U32 reg_size = nregs;
205*437bfbebSnyanmisaka
206*437bfbebSnyanmisaka VpuExtraInfo *extra_info = (VpuExtraInfo*)(regs + (nregs - VPU_EXTRA_INFO_SIZE));
207*437bfbebSnyanmisaka
208*437bfbebSnyanmisaka reqs[0].cmd = MPP_CMD_SET_REG_WRITE;
209*437bfbebSnyanmisaka reqs[0].flag = 0;
210*437bfbebSnyanmisaka reqs[0].offset = 0;
211*437bfbebSnyanmisaka reqs[0].size = reg_size * sizeof(RK_U32);
212*437bfbebSnyanmisaka reqs[0].data_ptr = REQ_DATA_PTR((void*)regs);
213*437bfbebSnyanmisaka reqs[0].flag |= VPU_MPP_FLAGS_MULTI_MSG;
214*437bfbebSnyanmisaka
215*437bfbebSnyanmisaka reqs[1].cmd = MPP_CMD_SET_REG_READ;
216*437bfbebSnyanmisaka reqs[1].flag = 0;
217*437bfbebSnyanmisaka reqs[1].offset = 0;
218*437bfbebSnyanmisaka reqs[1].size = reg_size * sizeof(RK_U32);
219*437bfbebSnyanmisaka reqs[1].data_ptr = REQ_DATA_PTR((void*)regs);
220*437bfbebSnyanmisaka
221*437bfbebSnyanmisaka if (extra_info && extra_info->magic == VPU_EXTRA_INFO_MAGIC) {
222*437bfbebSnyanmisaka reg_size = nregs - VPU_EXTRA_INFO_SIZE;
223*437bfbebSnyanmisaka reqs[2].cmd = MPP_CMD_SET_REG_ADDR_OFFSET;
224*437bfbebSnyanmisaka reqs[2].flag = 0;
225*437bfbebSnyanmisaka reqs[2].offset = 0;
226*437bfbebSnyanmisaka reqs[2].size = extra_info->count * sizeof(extra_info->patchs[0]);
227*437bfbebSnyanmisaka reqs[2].data_ptr = REQ_DATA_PTR((void *)&extra_info->patchs[0]);
228*437bfbebSnyanmisaka
229*437bfbebSnyanmisaka reqs[0].size = reg_size * sizeof(RK_U32);
230*437bfbebSnyanmisaka reqs[1].size = reg_size * sizeof(RK_U32);
231*437bfbebSnyanmisaka reqs[1].flag |= VPU_MPP_FLAGS_MULTI_MSG;
232*437bfbebSnyanmisaka reqs[2].flag |= VPU_MPP_FLAGS_LAST_MSG;
233*437bfbebSnyanmisaka ret = (RK_S32)ioctl(fd, MPP_IOC_CFG_V1, &reqs);
234*437bfbebSnyanmisaka } else {
235*437bfbebSnyanmisaka MppReqV1 reqs_tmp[2];
236*437bfbebSnyanmisaka reqs[1].flag |= VPU_MPP_FLAGS_LAST_MSG;
237*437bfbebSnyanmisaka memcpy(reqs_tmp, reqs, sizeof(MppReqV1) * 2);
238*437bfbebSnyanmisaka ret = (RK_S32)ioctl(fd, MPP_IOC_CFG_V1, &reqs_tmp);
239*437bfbebSnyanmisaka }
240*437bfbebSnyanmisaka
241*437bfbebSnyanmisaka } else {
242*437bfbebSnyanmisaka nregs *= sizeof(RK_U32);
243*437bfbebSnyanmisaka req.req = regs;
244*437bfbebSnyanmisaka req.size = nregs;
245*437bfbebSnyanmisaka ret = (RK_S32)ioctl(fd, VPU_IOC_SET_REG, &req);
246*437bfbebSnyanmisaka }
247*437bfbebSnyanmisaka
248*437bfbebSnyanmisaka if (ret)
249*437bfbebSnyanmisaka mpp_err_f("ioctl VPU_IOC_SET_REG failed ret %d errno %d %s\n", ret, errno, strerror(errno));
250*437bfbebSnyanmisaka
251*437bfbebSnyanmisaka return ret;
252*437bfbebSnyanmisaka }
253*437bfbebSnyanmisaka
VPUClientSendReg2(RK_S32 socket,RK_S32 offset,RK_S32 size,void * param)254*437bfbebSnyanmisaka RK_S32 VPUClientSendReg2(RK_S32 socket, RK_S32 offset, RK_S32 size, void *param)
255*437bfbebSnyanmisaka {
256*437bfbebSnyanmisaka RK_S32 ret = 0;
257*437bfbebSnyanmisaka
258*437bfbebSnyanmisaka if (param == NULL) {
259*437bfbebSnyanmisaka mpp_err_f("input param is NULL");
260*437bfbebSnyanmisaka return 1;
261*437bfbebSnyanmisaka }
262*437bfbebSnyanmisaka
263*437bfbebSnyanmisaka ret = (RK_S32)ioctl(socket, VPU_IOC_WRITE(offset, size), param);
264*437bfbebSnyanmisaka if (ret)
265*437bfbebSnyanmisaka mpp_err_f("ioctl VPU_IOC_WRITE failed ret %d", ret);
266*437bfbebSnyanmisaka
267*437bfbebSnyanmisaka return ret;
268*437bfbebSnyanmisaka }
269*437bfbebSnyanmisaka
VPUClientWaitResult(int socket,RK_U32 * regs,RK_U32 nregs,VPU_CMD_TYPE * cmd,RK_S32 * len)270*437bfbebSnyanmisaka RK_S32 VPUClientWaitResult(int socket, RK_U32 *regs, RK_U32 nregs, VPU_CMD_TYPE *cmd, RK_S32 *len)
271*437bfbebSnyanmisaka {
272*437bfbebSnyanmisaka int fd = socket;
273*437bfbebSnyanmisaka RK_S32 ret;
274*437bfbebSnyanmisaka VPUReq_t req;
275*437bfbebSnyanmisaka (void)len;
276*437bfbebSnyanmisaka
277*437bfbebSnyanmisaka if (ioctl_version > 0) {
278*437bfbebSnyanmisaka MppReqV1 mpp_req;
279*437bfbebSnyanmisaka RK_U32 reg_size = nregs;
280*437bfbebSnyanmisaka VpuExtraInfo *extra_info = (VpuExtraInfo*)(regs + (nregs - VPU_EXTRA_INFO_SIZE));
281*437bfbebSnyanmisaka
282*437bfbebSnyanmisaka if (extra_info && extra_info->magic == VPU_EXTRA_INFO_MAGIC) {
283*437bfbebSnyanmisaka reg_size -= 2;
284*437bfbebSnyanmisaka } else {
285*437bfbebSnyanmisaka reg_size -= VPU_EXTRA_INFO_SIZE;
286*437bfbebSnyanmisaka }
287*437bfbebSnyanmisaka
288*437bfbebSnyanmisaka mpp_req.cmd = MPP_CMD_POLL_HW_FINISH;
289*437bfbebSnyanmisaka mpp_req.flag = 0;
290*437bfbebSnyanmisaka mpp_req.offset = 0;
291*437bfbebSnyanmisaka mpp_req.size = reg_size * sizeof(RK_U32);
292*437bfbebSnyanmisaka mpp_req.data_ptr = REQ_DATA_PTR((void*)regs);
293*437bfbebSnyanmisaka ret = (RK_S32)ioctl(fd, MPP_IOC_CFG_V1, &mpp_req);
294*437bfbebSnyanmisaka } else {
295*437bfbebSnyanmisaka nregs *= sizeof(RK_U32);
296*437bfbebSnyanmisaka req.req = regs;
297*437bfbebSnyanmisaka req.size = nregs;
298*437bfbebSnyanmisaka
299*437bfbebSnyanmisaka ret = (RK_S32)ioctl(fd, VPU_IOC_GET_REG, &req);
300*437bfbebSnyanmisaka }
301*437bfbebSnyanmisaka
302*437bfbebSnyanmisaka if (ret) {
303*437bfbebSnyanmisaka mpp_err_f("ioctl VPU_IOC_GET_REG failed ret %d errno %d %s\n", ret, errno, strerror(errno));
304*437bfbebSnyanmisaka *cmd = VPU_SEND_CONFIG_ACK_FAIL;
305*437bfbebSnyanmisaka } else
306*437bfbebSnyanmisaka *cmd = VPU_SEND_CONFIG_ACK_OK;
307*437bfbebSnyanmisaka
308*437bfbebSnyanmisaka if (vpu_debug) {
309*437bfbebSnyanmisaka RK_U32 i;
310*437bfbebSnyanmisaka
311*437bfbebSnyanmisaka for (i = 0; i < nregs; i++) {
312*437bfbebSnyanmisaka mpp_log("get reg[%03d]: %08x\n", i, regs[i]);
313*437bfbebSnyanmisaka }
314*437bfbebSnyanmisaka }
315*437bfbebSnyanmisaka
316*437bfbebSnyanmisaka return ret;
317*437bfbebSnyanmisaka }
318*437bfbebSnyanmisaka
VPUClientGetHwCfg(int socket,RK_U32 * cfg,RK_U32 cfg_size)319*437bfbebSnyanmisaka RK_S32 VPUClientGetHwCfg(int socket, RK_U32 *cfg, RK_U32 cfg_size)
320*437bfbebSnyanmisaka {
321*437bfbebSnyanmisaka int fd = socket;
322*437bfbebSnyanmisaka RK_S32 ret;
323*437bfbebSnyanmisaka VPUReq_t req;
324*437bfbebSnyanmisaka req.req = cfg;
325*437bfbebSnyanmisaka req.size = cfg_size;
326*437bfbebSnyanmisaka ret = (RK_S32)ioctl(fd, VPU_IOC_GET_HW_FUSE_STATUS, &req);
327*437bfbebSnyanmisaka if (ret)
328*437bfbebSnyanmisaka mpp_err_f("ioctl VPU_IOC_GET_HW_FUSE_STATUS failed ret %d\n", ret);
329*437bfbebSnyanmisaka
330*437bfbebSnyanmisaka return ret;
331*437bfbebSnyanmisaka }
332*437bfbebSnyanmisaka
VPUCheckSupportWidth()333*437bfbebSnyanmisaka RK_U32 VPUCheckSupportWidth()
334*437bfbebSnyanmisaka {
335*437bfbebSnyanmisaka VPUHwDecConfig_t hwCfg;
336*437bfbebSnyanmisaka int fd = -1;
337*437bfbebSnyanmisaka fd = open("/dev/vpu_service", O_RDWR | O_CLOEXEC);
338*437bfbebSnyanmisaka if (fd < 0) {
339*437bfbebSnyanmisaka fd = open("/dev/vpu-service", O_RDWR | O_CLOEXEC);
340*437bfbebSnyanmisaka }
341*437bfbebSnyanmisaka memset(&hwCfg, 0, sizeof(VPUHwDecConfig_t));
342*437bfbebSnyanmisaka if (fd >= 0) {
343*437bfbebSnyanmisaka if (VPUClientGetHwCfg(fd, (RK_U32*)&hwCfg, sizeof(hwCfg))) {
344*437bfbebSnyanmisaka mpp_err_f("Get HwCfg failed\n");
345*437bfbebSnyanmisaka close(fd);
346*437bfbebSnyanmisaka return -1;
347*437bfbebSnyanmisaka }
348*437bfbebSnyanmisaka close(fd);
349*437bfbebSnyanmisaka fd = -1;
350*437bfbebSnyanmisaka }
351*437bfbebSnyanmisaka return hwCfg.maxDecPicWidth;
352*437bfbebSnyanmisaka }
353*437bfbebSnyanmisaka
VPUClientGetIOMMUStatus()354*437bfbebSnyanmisaka RK_S32 VPUClientGetIOMMUStatus()
355*437bfbebSnyanmisaka {
356*437bfbebSnyanmisaka return 1;
357*437bfbebSnyanmisaka }
358