xref: /OK3568_Linux_fs/external/mpp/inc/vpu.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright 2015 Rockchip Electronics Co. LTD
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Licensed under the Apache License, Version 2.0 (the "License");
5*4882a593Smuzhiyun  * you may not use this file except in compliance with the License.
6*4882a593Smuzhiyun  * You may obtain a copy of the License at
7*4882a593Smuzhiyun  *
8*4882a593Smuzhiyun  *      http://www.apache.org/licenses/LICENSE-2.0
9*4882a593Smuzhiyun  *
10*4882a593Smuzhiyun  * Unless required by applicable law or agreed to in writing, software
11*4882a593Smuzhiyun  * distributed under the License is distributed on an "AS IS" BASIS,
12*4882a593Smuzhiyun  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4882a593Smuzhiyun  * See the License for the specific language governing permissions and
14*4882a593Smuzhiyun  * limitations under the License.
15*4882a593Smuzhiyun  */
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #ifndef __VPU_H__
18*4882a593Smuzhiyun #define __VPU_H__
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #ifdef __cplusplus
21*4882a593Smuzhiyun extern "C" {
22*4882a593Smuzhiyun #endif
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun #include "rk_type.h"
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun #define VPU_SUCCESS                     (0)
27*4882a593Smuzhiyun #define VPU_FAILURE                     (-1)
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun #define VPU_HW_WAIT_OK                  VPU_SUCCESS
30*4882a593Smuzhiyun #define VPU_HW_WAIT_ERROR               VPU_FAILURE
31*4882a593Smuzhiyun #define VPU_HW_WAIT_TIMEOUT             1
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun // vpu decoder 60 registers, size 240B
34*4882a593Smuzhiyun #define VPU_REG_NUM_DEC                 (60)
35*4882a593Smuzhiyun // vpu post processor 41 registers, size 164B
36*4882a593Smuzhiyun #define VPU_REG_NUM_PP                  (41)
37*4882a593Smuzhiyun // vpu decoder + post processor 101 registers, size 404B
38*4882a593Smuzhiyun #define VPU_REG_NUM_DEC_PP              (VPU_REG_NUM_DEC+VPU_REG_NUM_PP)
39*4882a593Smuzhiyun // vpu encoder 96 registers, size 384B
40*4882a593Smuzhiyun #define VPU_REG_NUM_ENC                 (96)
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun typedef enum {
43*4882a593Smuzhiyun     VPU_ENC                 = 0x0,
44*4882a593Smuzhiyun     VPU_DEC                 = 0x1,
45*4882a593Smuzhiyun     VPU_PP                  = 0x2,
46*4882a593Smuzhiyun     VPU_DEC_PP              = 0x3,
47*4882a593Smuzhiyun     VPU_DEC_HEVC            = 0x4,
48*4882a593Smuzhiyun     VPU_DEC_RKV             = 0x5,
49*4882a593Smuzhiyun     VPU_ENC_RKV             = 0x6,
50*4882a593Smuzhiyun     VPU_DEC_AVSPLUS         = 0x7,
51*4882a593Smuzhiyun     VPU_ENC_VEPU22          = 0x8,
52*4882a593Smuzhiyun     VPU_TYPE_BUTT           ,
53*4882a593Smuzhiyun } VPU_CLIENT_TYPE;
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun /* Hardware decoder configuration description */
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun typedef struct VPUHwDecConfig {
58*4882a593Smuzhiyun     RK_U32 maxDecPicWidth;         /* Maximum video decoding width supported  */
59*4882a593Smuzhiyun     RK_U32 maxPpOutPicWidth;       /* Maximum output width of Post-Processor */
60*4882a593Smuzhiyun     RK_U32 h264Support;            /* HW supports h.264 */
61*4882a593Smuzhiyun     RK_U32 jpegSupport;            /* HW supports JPEG */
62*4882a593Smuzhiyun     RK_U32 mpeg4Support;           /* HW supports MPEG-4 */
63*4882a593Smuzhiyun     RK_U32 customMpeg4Support;     /* HW supports custom MPEG-4 features */
64*4882a593Smuzhiyun     RK_U32 vc1Support;             /* HW supports VC-1 Simple */
65*4882a593Smuzhiyun     RK_U32 mpeg2Support;           /* HW supports MPEG-2 */
66*4882a593Smuzhiyun     RK_U32 ppSupport;              /* HW supports post-processor */
67*4882a593Smuzhiyun     RK_U32 ppConfig;               /* HW post-processor functions bitmask */
68*4882a593Smuzhiyun     RK_U32 sorensonSparkSupport;   /* HW supports Sorenson Spark */
69*4882a593Smuzhiyun     RK_U32 refBufSupport;          /* HW supports reference picture buffering */
70*4882a593Smuzhiyun     RK_U32 vp6Support;             /* HW supports VP6 */
71*4882a593Smuzhiyun     RK_U32 vp7Support;             /* HW supports VP7 */
72*4882a593Smuzhiyun     RK_U32 vp8Support;             /* HW supports VP8 */
73*4882a593Smuzhiyun     RK_U32 avsSupport;             /* HW supports AVS */
74*4882a593Smuzhiyun     RK_U32 jpegESupport;           /* HW supports JPEG extensions */
75*4882a593Smuzhiyun     RK_U32 rvSupport;              /* HW supports REAL */
76*4882a593Smuzhiyun     RK_U32 mvcSupport;             /* HW supports H264 MVC extension */
77*4882a593Smuzhiyun } VPUHwDecConfig_t;
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun /* Hardware encoder configuration description */
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun typedef struct VPUHwEndConfig {
82*4882a593Smuzhiyun     RK_U32 maxEncodedWidth;        /* Maximum supported width for video encoding (not JPEG) */
83*4882a593Smuzhiyun     RK_U32 h264Enabled;            /* HW supports H.264 */
84*4882a593Smuzhiyun     RK_U32 jpegEnabled;            /* HW supports JPEG */
85*4882a593Smuzhiyun     RK_U32 mpeg4Enabled;           /* HW supports MPEG-4 */
86*4882a593Smuzhiyun     RK_U32 vsEnabled;              /* HW supports video stabilization */
87*4882a593Smuzhiyun     RK_U32 rgbEnabled;             /* HW supports RGB input */
88*4882a593Smuzhiyun     RK_U32 reg_size;                /* HW bus type in use */
89*4882a593Smuzhiyun     RK_U32 reserv[2];
90*4882a593Smuzhiyun } VPUHwEncConfig_t;
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun typedef enum {
93*4882a593Smuzhiyun     // common command
94*4882a593Smuzhiyun     VPU_CMD_REGISTER            ,
95*4882a593Smuzhiyun     VPU_CMD_REGISTER_ACK_OK     ,
96*4882a593Smuzhiyun     VPU_CMD_REGISTER_ACK_FAIL   ,
97*4882a593Smuzhiyun     VPU_CMD_UNREGISTER          ,
98*4882a593Smuzhiyun 
99*4882a593Smuzhiyun     VPU_SEND_CONFIG             ,
100*4882a593Smuzhiyun     VPU_SEND_CONFIG_ACK_OK      ,
101*4882a593Smuzhiyun     VPU_SEND_CONFIG_ACK_FAIL    ,
102*4882a593Smuzhiyun 
103*4882a593Smuzhiyun     VPU_GET_HW_INFO             ,
104*4882a593Smuzhiyun     VPU_GET_HW_INFO_ACK_OK      ,
105*4882a593Smuzhiyun     VPU_GET_HW_INFO_ACK_FAIL    ,
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun     VPU_CMD_BUTT                ,
108*4882a593Smuzhiyun } VPU_CMD_TYPE;
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun int VPUClientInit(VPU_CLIENT_TYPE type);
111*4882a593Smuzhiyun RK_S32 VPUClientRelease(int socket);
112*4882a593Smuzhiyun RK_S32 VPUClientSendReg(int socket, RK_U32 *regs, RK_U32 nregs);
113*4882a593Smuzhiyun RK_S32 VPUClientSendReg2(RK_S32 socket, RK_S32 offset, RK_S32 size, void *param);
114*4882a593Smuzhiyun RK_S32 VPUClientWaitResult(int socket, RK_U32 *regs, RK_U32 nregs, VPU_CMD_TYPE *cmd, RK_S32 *len);
115*4882a593Smuzhiyun RK_S32 VPUClientGetHwCfg(int socket, RK_U32 *cfg, RK_U32 cfg_size);
116*4882a593Smuzhiyun RK_S32 VPUClientGetIOMMUStatus();
117*4882a593Smuzhiyun RK_U32 VPUCheckSupportWidth();
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun #ifdef __cplusplus
120*4882a593Smuzhiyun }
121*4882a593Smuzhiyun #endif
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun #endif /* __VPU_H__ */
124