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__ */