13d0407baSopenharmony_ci/* 23d0407baSopenharmony_ci * Copyright 2020 Rockchip Electronics Co. LTD 33d0407baSopenharmony_ci * 43d0407baSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 53d0407baSopenharmony_ci * you may not use this file except in compliance with the License. 63d0407baSopenharmony_ci * You may obtain a copy of the License at 73d0407baSopenharmony_ci * 83d0407baSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 93d0407baSopenharmony_ci * 103d0407baSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 113d0407baSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 123d0407baSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133d0407baSopenharmony_ci * See the License for the specific language governing permissions and 143d0407baSopenharmony_ci * limitations under the License. 153d0407baSopenharmony_ci */ 163d0407baSopenharmony_ci 173d0407baSopenharmony_ci#ifndef __MPP_DEVICE_H__ 183d0407baSopenharmony_ci#define __MPP_DEVICE_H__ 193d0407baSopenharmony_ci 203d0407baSopenharmony_ci#include "mpp_err.h" 213d0407baSopenharmony_ci#include "mpp_dev_defs.h" 223d0407baSopenharmony_ci#include "mpp_callback.h" 233d0407baSopenharmony_ci 243d0407baSopenharmony_citypedef enum MppDevIoctlCmd_e { 253d0407baSopenharmony_ci /* device batch mode config */ 263d0407baSopenharmony_ci MPP_DEV_BATCH_ON, 273d0407baSopenharmony_ci MPP_DEV_BATCH_OFF, 283d0407baSopenharmony_ci MPP_DEV_DELIMIT, 293d0407baSopenharmony_ci MPP_DEV_SET_CB_CTX, 303d0407baSopenharmony_ci 313d0407baSopenharmony_ci /* hardware operation setup config */ 323d0407baSopenharmony_ci MPP_DEV_REG_WR, 333d0407baSopenharmony_ci MPP_DEV_REG_RD, 343d0407baSopenharmony_ci MPP_DEV_REG_OFFSET, 353d0407baSopenharmony_ci MPP_DEV_REG_OFFS, 363d0407baSopenharmony_ci MPP_DEV_RCB_INFO, 373d0407baSopenharmony_ci MPP_DEV_SET_INFO, 383d0407baSopenharmony_ci 393d0407baSopenharmony_ci MPP_DEV_CMD_SEND, 403d0407baSopenharmony_ci MPP_DEV_CMD_POLL, 413d0407baSopenharmony_ci 423d0407baSopenharmony_ci MPP_DEV_IOCTL_CMD_BUTT, 433d0407baSopenharmony_ci} MppDevIoctlCmd; 443d0407baSopenharmony_ci 453d0407baSopenharmony_ci/* for MPP_DEV_REG_WR */ 463d0407baSopenharmony_citypedef struct MppDevRegWrCfg_t { 473d0407baSopenharmony_ci void *reg; 483d0407baSopenharmony_ci RK_U32 size; 493d0407baSopenharmony_ci RK_U32 offset; 503d0407baSopenharmony_ci} MppDevRegWrCfg; 513d0407baSopenharmony_ci 523d0407baSopenharmony_ci/* for MPP_DEV_REG_RD */ 533d0407baSopenharmony_citypedef struct MppDevRegRdCfg_t { 543d0407baSopenharmony_ci void *reg; 553d0407baSopenharmony_ci RK_U32 size; 563d0407baSopenharmony_ci RK_U32 offset; 573d0407baSopenharmony_ci} MppDevRegRdCfg; 583d0407baSopenharmony_ci 593d0407baSopenharmony_ci/* for MPP_DEV_REG_OFFSET */ 603d0407baSopenharmony_citypedef struct MppDevRegOffsetCfg_t { 613d0407baSopenharmony_ci RK_U32 reg_idx; 623d0407baSopenharmony_ci RK_U32 offset; 633d0407baSopenharmony_ci} MppDevRegOffsetCfg; 643d0407baSopenharmony_ci 653d0407baSopenharmony_ci/* for multi MPP_DEV_REG_OFFSET */ 663d0407baSopenharmony_citypedef struct MppDevRegOffsCfg_t { 673d0407baSopenharmony_ci RK_S32 size; 683d0407baSopenharmony_ci RK_S32 count; 693d0407baSopenharmony_ci MppDevRegOffsetCfg cfgs[]; 703d0407baSopenharmony_ci} MppDevRegOffCfgs; 713d0407baSopenharmony_ci 723d0407baSopenharmony_ci/* for MPP_DEV_RCB_INFO */ 733d0407baSopenharmony_citypedef struct MppDevRcbInfoCfg_t { 743d0407baSopenharmony_ci RK_U32 reg_idx; 753d0407baSopenharmony_ci RK_U32 size; 763d0407baSopenharmony_ci} MppDevRcbInfoCfg; 773d0407baSopenharmony_ci 783d0407baSopenharmony_ci/* for MPP_DEV_SET_INFO */ 793d0407baSopenharmony_citypedef struct MppDevSetInfoCfg_t { 803d0407baSopenharmony_ci RK_U32 type; 813d0407baSopenharmony_ci RK_U32 flag; 823d0407baSopenharmony_ci RK_U64 data; 833d0407baSopenharmony_ci} MppDevInfoCfg; 843d0407baSopenharmony_ci 853d0407baSopenharmony_citypedef union MppDevPollEncSliceInfo_u { 863d0407baSopenharmony_ci RK_U32 val; 873d0407baSopenharmony_ci struct { 883d0407baSopenharmony_ci RK_U32 length : 31; 893d0407baSopenharmony_ci RK_U32 last : 1; 903d0407baSopenharmony_ci }; 913d0407baSopenharmony_ci} MppDevPollEncSliceInfo; 923d0407baSopenharmony_ci 933d0407baSopenharmony_ci/* for MPP_DEV_POLL */ 943d0407baSopenharmony_citypedef struct MppDevPollCfg_t { 953d0407baSopenharmony_ci RK_S32 poll_type; 963d0407baSopenharmony_ci RK_S32 poll_ret; 973d0407baSopenharmony_ci RK_S32 count_max; 983d0407baSopenharmony_ci RK_S32 count_ret; 993d0407baSopenharmony_ci MppDevPollEncSliceInfo slice_info[]; 1003d0407baSopenharmony_ci} MppDevPollCfg; 1013d0407baSopenharmony_ci 1023d0407baSopenharmony_citypedef struct MppDevApi_t { 1033d0407baSopenharmony_ci const char *name; 1043d0407baSopenharmony_ci RK_U32 ctx_size; 1053d0407baSopenharmony_ci MPP_RET (*init)(void *ctx, MppClientType type); 1063d0407baSopenharmony_ci MPP_RET (*deinit)(void *ctx); 1073d0407baSopenharmony_ci 1083d0407baSopenharmony_ci /* bat mode function */ 1093d0407baSopenharmony_ci MPP_RET (*attach)(void *ctx); 1103d0407baSopenharmony_ci MPP_RET (*detach)(void *ctx); 1113d0407baSopenharmony_ci MPP_RET (*delimit)(void *ctx); 1123d0407baSopenharmony_ci MPP_RET (*set_cb_ctx)(void *ctx, MppCbCtx *cb); 1133d0407baSopenharmony_ci 1143d0407baSopenharmony_ci /* config the cmd on preparing */ 1153d0407baSopenharmony_ci MPP_RET (*reg_wr)(void *ctx, MppDevRegWrCfg *cfg); 1163d0407baSopenharmony_ci MPP_RET (*reg_rd)(void *ctx, MppDevRegRdCfg *cfg); 1173d0407baSopenharmony_ci MPP_RET (*reg_offset)(void *ctx, MppDevRegOffsetCfg *cfg); 1183d0407baSopenharmony_ci MPP_RET (*reg_offs)(void *ctx, MppDevRegOffCfgs *cfg); 1193d0407baSopenharmony_ci MPP_RET (*rcb_info)(void *ctx, MppDevRcbInfoCfg *cfg); 1203d0407baSopenharmony_ci MPP_RET (*set_info)(void *ctx, MppDevInfoCfg *cfg); 1213d0407baSopenharmony_ci 1223d0407baSopenharmony_ci /* send cmd to hardware */ 1233d0407baSopenharmony_ci MPP_RET (*cmd_send)(void *ctx); 1243d0407baSopenharmony_ci 1253d0407baSopenharmony_ci /* poll cmd from hardware */ 1263d0407baSopenharmony_ci MPP_RET (*cmd_poll)(void *ctx, MppDevPollCfg *cfg); 1273d0407baSopenharmony_ci} MppDevApi; 1283d0407baSopenharmony_ci 1293d0407baSopenharmony_citypedef void* MppDev; 1303d0407baSopenharmony_ci 1313d0407baSopenharmony_ci#ifdef __cplusplus 1323d0407baSopenharmony_ciextern "C" { 1333d0407baSopenharmony_ci#endif 1343d0407baSopenharmony_ci 1353d0407baSopenharmony_ciMPP_RET mpp_dev_init(MppDev *ctx, MppClientType type); 1363d0407baSopenharmony_ciMPP_RET mpp_dev_deinit(MppDev ctx); 1373d0407baSopenharmony_ci 1383d0407baSopenharmony_ciMPP_RET mpp_dev_ioctl(MppDev ctx, RK_S32 cmd, void *param); 1393d0407baSopenharmony_ci 1403d0407baSopenharmony_ci/* special helper function for large address offset config */ 1413d0407baSopenharmony_ciMPP_RET mpp_dev_set_reg_offset(MppDev dev, RK_S32 index, RK_U32 offset); 1423d0407baSopenharmony_ci 1433d0407baSopenharmony_ci/* register offset multi config */ 1443d0407baSopenharmony_ciMPP_RET mpp_dev_multi_offset_init(MppDevRegOffCfgs **cfgs, RK_S32 size); 1453d0407baSopenharmony_ciMPP_RET mpp_dev_multi_offset_deinit(MppDevRegOffCfgs *cfgs); 1463d0407baSopenharmony_ci 1473d0407baSopenharmony_ciMPP_RET mpp_dev_multi_offset_reset(MppDevRegOffCfgs *cfgs); 1483d0407baSopenharmony_ciMPP_RET mpp_dev_multi_offset_update(MppDevRegOffCfgs *cfgs, RK_S32 index, RK_U32 offset); 1493d0407baSopenharmony_ci 1503d0407baSopenharmony_ci#ifdef __cplusplus 1513d0407baSopenharmony_ci} 1523d0407baSopenharmony_ci#endif 1533d0407baSopenharmony_ci 1543d0407baSopenharmony_ci#endif /* __MPP_DEVICE_H__ */ 155