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