xref: /rockchip-linux_mpp/osal/inc/mpp_service.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
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