xref: /OK3568_Linux_fs/external/mpp/osal/inc/mpp_service.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright 2020 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 __MPP_SERVICE_H__
18*4882a593Smuzhiyun #define __MPP_SERVICE_H__
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #include "rk_type.h"
21*4882a593Smuzhiyun #include <asm/ioctl.h>
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun /* Use 'v' as magic number */
24*4882a593Smuzhiyun #define MPP_IOC_MAGIC                       'v'
25*4882a593Smuzhiyun #define MPP_IOC_CFG_V1                      _IOW(MPP_IOC_MAGIC, 1, unsigned int)
26*4882a593Smuzhiyun #define MAX_REQ_NUM                         16
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun #if __SIZEOF_POINTER__ == 4
29*4882a593Smuzhiyun #define REQ_DATA_PTR(ptr) ((RK_U32)ptr)
30*4882a593Smuzhiyun #elif __SIZEOF_POINTER__ == 8
31*4882a593Smuzhiyun #define REQ_DATA_PTR(ptr) ((RK_U64)ptr)
32*4882a593Smuzhiyun #endif
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun /* define flags for mpp_request */
35*4882a593Smuzhiyun #define MPP_FLAGS_MULTI_MSG         (0x00000001)
36*4882a593Smuzhiyun #define MPP_FLAGS_LAST_MSG          (0x00000002)
37*4882a593Smuzhiyun #define MPP_FLAGS_REG_FD_NO_TRANS   (0x00000004)
38*4882a593Smuzhiyun #define MPP_FLAGS_SCL_FD_NO_TRANS   (0x00000008)
39*4882a593Smuzhiyun #define MPP_FLAGS_REG_OFFSET_ALONE  (0x00000010)
40*4882a593Smuzhiyun #define MPP_FLAGS_POLL_NON_BLOCK    (0x00000020)
41*4882a593Smuzhiyun #define MPP_FLAGS_SECURE_MODE       (0x00010000)
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun /* mpp service capability description */
44*4882a593Smuzhiyun typedef enum MppDevCmd_e {
45*4882a593Smuzhiyun     MPP_DEV_GET_START               = 0,
46*4882a593Smuzhiyun     MPP_DEV_GET_MAX_WIDTH,
47*4882a593Smuzhiyun     MPP_DEV_GET_MAX_HEIGHT,
48*4882a593Smuzhiyun     MPP_DEV_GET_MIN_WIDTH,
49*4882a593Smuzhiyun     MPP_DEV_GET_MIN_HEIGHT,
50*4882a593Smuzhiyun     MPP_DEV_GET_MMU_STATUS,
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun     MPP_DEV_SET_START               = 0x01000000,
53*4882a593Smuzhiyun     MPP_DEV_SET_HARD_PLATFORM,      // set paltform by user
54*4882a593Smuzhiyun     MPP_DEV_ENABLE_POSTPROCCESS,
55*4882a593Smuzhiyun 
56*4882a593Smuzhiyun     MPP_DEV_PROP_BUTT,
57*4882a593Smuzhiyun } MppDevCmd;
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun typedef enum MppServiceCmdType_e {
60*4882a593Smuzhiyun     MPP_CMD_QUERY_BASE              = 0,
61*4882a593Smuzhiyun     MPP_CMD_PROBE_HW_SUPPORT        = MPP_CMD_QUERY_BASE + 0,
62*4882a593Smuzhiyun     MPP_CMD_QUERY_HW_ID             = MPP_CMD_QUERY_BASE + 1,
63*4882a593Smuzhiyun     MPP_CMD_QUERY_CMD_SUPPORT       = MPP_CMD_QUERY_BASE + 2,
64*4882a593Smuzhiyun     MPP_CMD_QUERY_BUTT,
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun     MPP_CMD_INIT_BASE               = 0x100,
67*4882a593Smuzhiyun     MPP_CMD_INIT_CLIENT_TYPE        = MPP_CMD_INIT_BASE + 0,
68*4882a593Smuzhiyun     MPP_CMD_INIT_DRIVER_DATA        = MPP_CMD_INIT_BASE + 1,
69*4882a593Smuzhiyun     MPP_CMD_INIT_TRANS_TABLE        = MPP_CMD_INIT_BASE + 2,
70*4882a593Smuzhiyun     MPP_CMD_INIT_BUTT,
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun     MPP_CMD_SEND_BASE               = 0x200,
73*4882a593Smuzhiyun     MPP_CMD_SET_REG_WRITE           = MPP_CMD_SEND_BASE + 0,
74*4882a593Smuzhiyun     MPP_CMD_SET_REG_READ            = MPP_CMD_SEND_BASE + 1,
75*4882a593Smuzhiyun     MPP_CMD_SET_REG_ADDR_OFFSET     = MPP_CMD_SEND_BASE + 2,
76*4882a593Smuzhiyun     MPP_CMD_SET_RCB_INFO            = MPP_CMD_SEND_BASE + 3,
77*4882a593Smuzhiyun     /* for batch process start a task of one session */
78*4882a593Smuzhiyun     MPP_CMD_SET_SESSION_FD          = MPP_CMD_SEND_BASE + 4,
79*4882a593Smuzhiyun     MPP_CMD_SEND_BUTT,
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun     MPP_CMD_POLL_BASE               = 0x300,
82*4882a593Smuzhiyun     MPP_CMD_POLL_HW_FINISH          = MPP_CMD_POLL_BASE + 0,
83*4882a593Smuzhiyun     MPP_CMD_POLL_HW_IRQ             = MPP_CMD_POLL_BASE + 1,
84*4882a593Smuzhiyun     MPP_CMD_POLL_BUTT,
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun     MPP_CMD_CONTROL_BASE            = 0x400,
87*4882a593Smuzhiyun     MPP_CMD_RESET_SESSION           = MPP_CMD_CONTROL_BASE + 0,
88*4882a593Smuzhiyun     MPP_CMD_TRANS_FD_TO_IOVA        = MPP_CMD_CONTROL_BASE + 1,
89*4882a593Smuzhiyun     MPP_CMD_RELEASE_FD              = MPP_CMD_CONTROL_BASE + 2,
90*4882a593Smuzhiyun     MPP_CMD_SEND_CODEC_INFO         = MPP_CMD_CONTROL_BASE + 3,
91*4882a593Smuzhiyun     MPP_CMD_SET_ERR_REF_HACK        = MPP_CMD_CONTROL_BASE + 4,
92*4882a593Smuzhiyun     MPP_CMD_CONTROL_BUTT,
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun     MPP_CMD_BUTT,
95*4882a593Smuzhiyun } MppServiceCmdType;
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun typedef struct mppReqV1_t {
98*4882a593Smuzhiyun     RK_U32 cmd;
99*4882a593Smuzhiyun     RK_U32 flag;
100*4882a593Smuzhiyun     RK_U32 size;
101*4882a593Smuzhiyun     RK_U32 offset;
102*4882a593Smuzhiyun     RK_U64 data_ptr;
103*4882a593Smuzhiyun } MppReqV1;
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun typedef struct MppServiceCmdCap_t {
106*4882a593Smuzhiyun     RK_U32 support_cmd;
107*4882a593Smuzhiyun     RK_U32 query_cmd;
108*4882a593Smuzhiyun     RK_U32 init_cmd;
109*4882a593Smuzhiyun     RK_U32 send_cmd;
110*4882a593Smuzhiyun     RK_U32 poll_cmd;
111*4882a593Smuzhiyun     RK_U32 ctrl_cmd;
112*4882a593Smuzhiyun } MppServiceCmdCap;
113*4882a593Smuzhiyun 
114*4882a593Smuzhiyun typedef struct MppDevBatCmd_t {
115*4882a593Smuzhiyun     RK_U64 flag;
116*4882a593Smuzhiyun     RK_S32 client;
117*4882a593Smuzhiyun     RK_S32 ret;
118*4882a593Smuzhiyun } MppDevBatCmd;
119*4882a593Smuzhiyun 
120*4882a593Smuzhiyun #ifdef  __cplusplus
121*4882a593Smuzhiyun extern "C" {
122*4882a593Smuzhiyun #endif
123*4882a593Smuzhiyun 
124*4882a593Smuzhiyun void check_mpp_service_cap(RK_U32 *codec_type, RK_U32 *hw_ids, MppServiceCmdCap *cap);
125*4882a593Smuzhiyun const MppServiceCmdCap *mpp_get_mpp_service_cmd_cap(void);
126*4882a593Smuzhiyun const char *mpp_get_mpp_service_name(void);
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun #ifdef  __cplusplus
129*4882a593Smuzhiyun }
130*4882a593Smuzhiyun #endif
131*4882a593Smuzhiyun 
132*4882a593Smuzhiyun #endif /* __MPP_SERVICE_H__ */
133