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