13d0407baSopenharmony_ci/*
23d0407baSopenharmony_ci * Copyright (c) 2021 Rockchip Electronics Co., Ltd.
33d0407baSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
43d0407baSopenharmony_ci * you may not use this file except in compliance with the License.
53d0407baSopenharmony_ci * You may obtain a copy of the License at
63d0407baSopenharmony_ci *
73d0407baSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
83d0407baSopenharmony_ci *
93d0407baSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
103d0407baSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
113d0407baSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
123d0407baSopenharmony_ci * See the License for the specific language governing permissions and
133d0407baSopenharmony_ci * limitations under the License.
143d0407baSopenharmony_ci */
153d0407baSopenharmony_ci
163d0407baSopenharmony_ci#ifndef __MPP_SERVICE_H__
173d0407baSopenharmony_ci#define __MPP_SERVICE_H__
183d0407baSopenharmony_ci
193d0407baSopenharmony_ci#include <asm/ioctl.h>
203d0407baSopenharmony_ci#include "rk_type.h"
213d0407baSopenharmony_ci
223d0407baSopenharmony_ci/* Use 'v' as magic number */
233d0407baSopenharmony_ci#define MPP_IOC_MAGIC                       'v'
243d0407baSopenharmony_ci#define MPP_IOC_CFG_V1                      _IOW(MPP_IOC_MAGIC, 1, unsigned int)
253d0407baSopenharmony_ci#define MAX_REQ_NUM                         16
263d0407baSopenharmony_ci
273d0407baSopenharmony_ci#if __SIZEOF_POINTER__ == 4
283d0407baSopenharmony_ci#define REQ_DATA_PTR(ptr) ((RK_U32)(ptr))
293d0407baSopenharmony_ci#elif __SIZEOF_POINTER__ == 8
303d0407baSopenharmony_ci#define REQ_DATA_PTR(ptr) ((RK_U64)(ptr))
313d0407baSopenharmony_ci#endif
323d0407baSopenharmony_ci
333d0407baSopenharmony_ci/* define flags for mpp_request */
343d0407baSopenharmony_ci#define MPP_FLAGS_MULTI_MSG         (0x00000001)
353d0407baSopenharmony_ci#define MPP_FLAGS_LAST_MSG          (0x00000002)
363d0407baSopenharmony_ci#define MPP_FLAGS_REG_FD_NO_TRANS   (0x00000004)
373d0407baSopenharmony_ci#define MPP_FLAGS_SCL_FD_NO_TRANS   (0x00000008)
383d0407baSopenharmony_ci#define MPP_FLAGS_REG_OFFSET_ALONE  (0x00000010)
393d0407baSopenharmony_ci#define MPP_FLAGS_POLL_NON_BLOCK    (0x00000020)
403d0407baSopenharmony_ci#define MPP_FLAGS_SECURE_MODE       (0x00010000)
413d0407baSopenharmony_ci
423d0407baSopenharmony_ci/* mpp service capability description */
433d0407baSopenharmony_citypedef enum MppDevCmd_e {
443d0407baSopenharmony_ci    MPP_DEV_GET_START               = 0,
453d0407baSopenharmony_ci    MPP_DEV_GET_MAX_WIDTH,
463d0407baSopenharmony_ci    MPP_DEV_GET_MAX_HEIGHT,
473d0407baSopenharmony_ci    MPP_DEV_GET_MIN_WIDTH,
483d0407baSopenharmony_ci    MPP_DEV_GET_MIN_HEIGHT,
493d0407baSopenharmony_ci    MPP_DEV_GET_MMU_STATUS,
503d0407baSopenharmony_ci
513d0407baSopenharmony_ci    MPP_DEV_SET_START               = 0x01000000,
523d0407baSopenharmony_ci    MPP_DEV_SET_HARD_PLATFORM,      // set paltform by user
533d0407baSopenharmony_ci    MPP_DEV_ENABLE_POSTPROCCESS,
543d0407baSopenharmony_ci
553d0407baSopenharmony_ci    MPP_DEV_PROP_BUTT,
563d0407baSopenharmony_ci} MppDevCmd;
573d0407baSopenharmony_ci
583d0407baSopenharmony_citypedef enum MppServiceCmdType_e {
593d0407baSopenharmony_ci    MPP_CMD_QUERY_BASE              = 0,
603d0407baSopenharmony_ci    MPP_CMD_PROBE_HW_SUPPORT        = MPP_CMD_QUERY_BASE + 0,
613d0407baSopenharmony_ci    MPP_CMD_QUERY_HW_ID             = MPP_CMD_QUERY_BASE + 1,
623d0407baSopenharmony_ci    MPP_CMD_QUERY_CMD_SUPPORT       = MPP_CMD_QUERY_BASE + 2,
633d0407baSopenharmony_ci    MPP_CMD_QUERY_BUTT,
643d0407baSopenharmony_ci
653d0407baSopenharmony_ci    MPP_CMD_INIT_BASE               = 0x100,
663d0407baSopenharmony_ci    MPP_CMD_INIT_CLIENT_TYPE        = MPP_CMD_INIT_BASE + 0,
673d0407baSopenharmony_ci    MPP_CMD_INIT_DRIVER_DATA        = MPP_CMD_INIT_BASE + 1,
683d0407baSopenharmony_ci    MPP_CMD_INIT_TRANS_TABLE        = MPP_CMD_INIT_BASE + 2,
693d0407baSopenharmony_ci    MPP_CMD_INIT_BUTT,
703d0407baSopenharmony_ci
713d0407baSopenharmony_ci    MPP_CMD_SEND_BASE               = 0x200,
723d0407baSopenharmony_ci    MPP_CMD_SET_REG_WRITE           = MPP_CMD_SEND_BASE + 0,
733d0407baSopenharmony_ci    MPP_CMD_SET_REG_READ            = MPP_CMD_SEND_BASE + 1,
743d0407baSopenharmony_ci    MPP_CMD_SET_REG_ADDR_OFFSET     = MPP_CMD_SEND_BASE + 2,
753d0407baSopenharmony_ci    MPP_CMD_SET_RCB_INFO            = MPP_CMD_SEND_BASE + 3,
763d0407baSopenharmony_ci    /* for batch process start a task of one session */
773d0407baSopenharmony_ci    MPP_CMD_SET_SESSION_FD          = MPP_CMD_SEND_BASE + 4,
783d0407baSopenharmony_ci    MPP_CMD_SEND_BUTT,
793d0407baSopenharmony_ci
803d0407baSopenharmony_ci    MPP_CMD_POLL_BASE               = 0x300,
813d0407baSopenharmony_ci    MPP_CMD_POLL_HW_FINISH          = MPP_CMD_POLL_BASE + 0,
823d0407baSopenharmony_ci    MPP_CMD_POLL_BUTT,
833d0407baSopenharmony_ci
843d0407baSopenharmony_ci    MPP_CMD_CONTROL_BASE            = 0x400,
853d0407baSopenharmony_ci    MPP_CMD_RESET_SESSION           = MPP_CMD_CONTROL_BASE + 0,
863d0407baSopenharmony_ci    MPP_CMD_TRANS_FD_TO_IOVA        = MPP_CMD_CONTROL_BASE + 1,
873d0407baSopenharmony_ci    MPP_CMD_RELEASE_FD              = MPP_CMD_CONTROL_BASE + 2,
883d0407baSopenharmony_ci    MPP_CMD_SEND_CODEC_INFO         = MPP_CMD_CONTROL_BASE + 3,
893d0407baSopenharmony_ci    MPP_CMD_BAT_CMD                 = MPP_CMD_CONTROL_BASE + 4,
903d0407baSopenharmony_ci    MPP_CMD_CONTROL_BUTT,
913d0407baSopenharmony_ci
923d0407baSopenharmony_ci    MPP_CMD_BUTT,
933d0407baSopenharmony_ci} MppServiceCmdType;
943d0407baSopenharmony_ci
953d0407baSopenharmony_citypedef struct mppReqV1_t {
963d0407baSopenharmony_ci    RK_U32 cmd;
973d0407baSopenharmony_ci    RK_U32 flag;
983d0407baSopenharmony_ci    RK_U32 size;
993d0407baSopenharmony_ci    RK_U32 offset;
1003d0407baSopenharmony_ci    RK_U64 data_ptr;
1013d0407baSopenharmony_ci} MppReqV1;
1023d0407baSopenharmony_ci
1033d0407baSopenharmony_citypedef struct MppServiceCmdCap_t {
1043d0407baSopenharmony_ci    RK_U32 support_cmd;
1053d0407baSopenharmony_ci    RK_U32 query_cmd;
1063d0407baSopenharmony_ci    RK_U32 init_cmd;
1073d0407baSopenharmony_ci    RK_U32 send_cmd;
1083d0407baSopenharmony_ci    RK_U32 poll_cmd;
1093d0407baSopenharmony_ci    RK_U32 ctrl_cmd;
1103d0407baSopenharmony_ci} MppServiceCmdCap;
1113d0407baSopenharmony_ci
1123d0407baSopenharmony_ci#ifdef  __cplusplus
1133d0407baSopenharmony_ciextern "C" {
1143d0407baSopenharmony_ci#endif
1153d0407baSopenharmony_ci
1163d0407baSopenharmony_civoid check_mpp_service_cap(RK_U32 *codec_type, RK_U32 *hw_ids, MppServiceCmdCap *cap);
1173d0407baSopenharmony_ciconst MppServiceCmdCap *mpp_get_mpp_service_cmd_cap(void);
1183d0407baSopenharmony_ciconst char *mpp_get_mpp_service_name(void);
1193d0407baSopenharmony_ci
1203d0407baSopenharmony_ci#ifdef  __cplusplus
1213d0407baSopenharmony_ci}
1223d0407baSopenharmony_ci#endif
1233d0407baSopenharmony_ci
1243d0407baSopenharmony_ci#endif /* __MPP_SERVICE_H__ */