1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Copyright (c) 2016 MediaTek Inc. 4 * Author: PC Chen <pc.chen@mediatek.com> 5 */ 6 7 #ifndef _VDEC_VPU_IF_H_ 8 #define _VDEC_VPU_IF_H_ 9 10 #include "mtk_vcodec_fw.h" 11 12 struct mtk_vcodec_ctx; 13 14 /** 15 * struct vdec_vpu_inst - VPU instance for video codec 16 * @id : ipi msg id for each decoder 17 * @vsi : driver structure allocated by VPU side and shared to AP side 18 * for control and info share 19 * @failure : VPU execution result status, 0: success, others: fail 20 * @inst_addr : VPU decoder instance address 21 * @fw_abi_version : ABI version of the firmware. 22 * @inst_id : if fw_abi_version >= 2, contains the instance ID to be given 23 * in place of inst_addr in messages. 24 * @signaled : 1 - Host has received ack message from VPU, 0 - not received 25 * @ctx : context for v4l2 layer integration 26 * @dev : platform device of VPU 27 * @wq : wait queue to wait VPU message ack 28 * @handler : ipi handler for each decoder 29 */ 30 struct vdec_vpu_inst { 31 int id; 32 void *vsi; 33 int32_t failure; 34 uint32_t inst_addr; 35 uint32_t fw_abi_version; 36 uint32_t inst_id; 37 unsigned int signaled; 38 struct mtk_vcodec_ctx *ctx; 39 wait_queue_head_t wq; 40 mtk_vcodec_ipi_handler handler; 41 }; 42 43 /** 44 * vpu_dec_init - init decoder instance and allocate required resource in VPU. 45 * 46 * @vpu: instance for vdec_vpu_inst 47 */ 48 int vpu_dec_init(struct vdec_vpu_inst *vpu); 49 50 /** 51 * vpu_dec_start - start decoding, basically the function will be invoked once 52 * every frame. 53 * 54 * @vpu : instance for vdec_vpu_inst 55 * @data: meta data to pass bitstream info to VPU decoder 56 * @len : meta data length 57 */ 58 int vpu_dec_start(struct vdec_vpu_inst *vpu, uint32_t *data, unsigned int len); 59 60 /** 61 * vpu_dec_end - end decoding, basically the function will be invoked once 62 * when HW decoding done interrupt received successfully. The 63 * decoder in VPU will continue to do reference frame management 64 * and check if there is a new decoded frame available to display. 65 * 66 * @vpu : instance for vdec_vpu_inst 67 */ 68 int vpu_dec_end(struct vdec_vpu_inst *vpu); 69 70 /** 71 * vpu_dec_deinit - deinit decoder instance and resource freed in VPU. 72 * 73 * @vpu: instance for vdec_vpu_inst 74 */ 75 int vpu_dec_deinit(struct vdec_vpu_inst *vpu); 76 77 /** 78 * vpu_dec_reset - reset decoder, use for flush decoder when end of stream or 79 * seek. Remainig non displayed frame will be pushed to display. 80 * 81 * @vpu: instance for vdec_vpu_inst 82 */ 83 int vpu_dec_reset(struct vdec_vpu_inst *vpu); 84 85 #endif 86