1*437bfbebSnyanmisaka /* SPDX-License-Identifier: Apache-2.0 OR MIT */ 2*437bfbebSnyanmisaka /* 3*437bfbebSnyanmisaka * Copyright (c) 2021 Rockchip Electronics Co., Ltd. 4*437bfbebSnyanmisaka */ 5*437bfbebSnyanmisaka 6*437bfbebSnyanmisaka #ifndef __MPP_SERVICE_IMPL_H__ 7*437bfbebSnyanmisaka #define __MPP_SERVICE_IMPL_H__ 8*437bfbebSnyanmisaka 9*437bfbebSnyanmisaka #include "mpp_list.h" 10*437bfbebSnyanmisaka 11*437bfbebSnyanmisaka #include "mpp_device.h" 12*437bfbebSnyanmisaka #include "mpp_service.h" 13*437bfbebSnyanmisaka 14*437bfbebSnyanmisaka #define MAX_REG_OFFSET 64 15*437bfbebSnyanmisaka #define MAX_RCB_OFFSET 32 16*437bfbebSnyanmisaka #define MAX_INFO_COUNT 16 17*437bfbebSnyanmisaka 18*437bfbebSnyanmisaka typedef struct FdTransInfo_t { 19*437bfbebSnyanmisaka RK_U32 reg_idx; 20*437bfbebSnyanmisaka RK_U32 offset; 21*437bfbebSnyanmisaka } RegOffsetInfo; 22*437bfbebSnyanmisaka 23*437bfbebSnyanmisaka typedef struct RcbInfo_t { 24*437bfbebSnyanmisaka RK_U32 reg_idx; 25*437bfbebSnyanmisaka RK_U32 size; 26*437bfbebSnyanmisaka } RcbInfo; 27*437bfbebSnyanmisaka 28*437bfbebSnyanmisaka typedef struct MppDevMppService_t { 29*437bfbebSnyanmisaka RK_S32 client_type; 30*437bfbebSnyanmisaka RK_S32 client; 31*437bfbebSnyanmisaka RK_S32 server; 32*437bfbebSnyanmisaka void *serv_ctx; 33*437bfbebSnyanmisaka RK_S32 batch_io; 34*437bfbebSnyanmisaka MppCbCtx *dev_cb; 35*437bfbebSnyanmisaka 36*437bfbebSnyanmisaka MppReqV1 *reqs; 37*437bfbebSnyanmisaka RK_S32 req_max; 38*437bfbebSnyanmisaka RK_S32 req_cnt; 39*437bfbebSnyanmisaka 40*437bfbebSnyanmisaka RegOffsetInfo *reg_offset_info; 41*437bfbebSnyanmisaka RK_S32 reg_offset_max; 42*437bfbebSnyanmisaka RK_S32 reg_offset_count; 43*437bfbebSnyanmisaka RK_S32 reg_offset_pos; 44*437bfbebSnyanmisaka 45*437bfbebSnyanmisaka RcbInfo *rcb_info; 46*437bfbebSnyanmisaka RK_S32 rcb_max; 47*437bfbebSnyanmisaka RK_S32 rcb_count; 48*437bfbebSnyanmisaka RK_S32 rcb_pos; 49*437bfbebSnyanmisaka 50*437bfbebSnyanmisaka MppDevBatCmd bat_cmd; 51*437bfbebSnyanmisaka 52*437bfbebSnyanmisaka RK_S32 info_count; 53*437bfbebSnyanmisaka MppDevInfoCfg info[MAX_INFO_COUNT]; 54*437bfbebSnyanmisaka 55*437bfbebSnyanmisaka /* support max cmd buttom */ 56*437bfbebSnyanmisaka const MppServiceCmdCap *cap; 57*437bfbebSnyanmisaka RK_U32 support_set_info; 58*437bfbebSnyanmisaka RK_U32 support_set_rcb_info; 59*437bfbebSnyanmisaka RK_U32 support_hw_irq; 60*437bfbebSnyanmisaka 61*437bfbebSnyanmisaka pthread_mutex_t lock_bufs; 62*437bfbebSnyanmisaka struct list_head list_bufs; 63*437bfbebSnyanmisaka } MppDevMppService; 64*437bfbebSnyanmisaka 65*437bfbebSnyanmisaka #ifdef __cplusplus 66*437bfbebSnyanmisaka extern "C" { 67*437bfbebSnyanmisaka #endif 68*437bfbebSnyanmisaka 69*437bfbebSnyanmisaka RK_S32 mpp_service_ioctl(RK_S32 fd, RK_U32 cmd, RK_U32 size, void *param); 70*437bfbebSnyanmisaka RK_S32 mpp_service_ioctl_request(RK_S32 fd, MppReqV1 *req); 71*437bfbebSnyanmisaka MPP_RET mpp_service_check_cmd_valid(RK_U32 cmd, const MppServiceCmdCap *cap); 72*437bfbebSnyanmisaka 73*437bfbebSnyanmisaka #ifdef __cplusplus 74*437bfbebSnyanmisaka } 75*437bfbebSnyanmisaka #endif 76*437bfbebSnyanmisaka 77*437bfbebSnyanmisaka #endif /* __MPP_SERVICE_IMPL_H__ */ 78