1/* SPDX-License-Identifier: GPL-2.0 */
2
3#ifndef _MTK_VCODEC_FW_H_
4#define _MTK_VCODEC_FW_H_
5
6#include <linux/remoteproc.h>
7#include <linux/remoteproc/mtk_scp.h>
8
9#include "../../vpu/mtk_vpu.h"
10
11struct mtk_vcodec_dec_dev;
12struct mtk_vcodec_enc_dev;
13
14enum mtk_vcodec_fw_type {
15	VPU,
16	SCP,
17};
18
19enum mtk_vcodec_fw_use {
20	DECODER,
21	ENCODER,
22};
23
24struct mtk_vcodec_fw;
25
26typedef void (*mtk_vcodec_ipi_handler) (void *data,
27	unsigned int len, void *priv);
28
29struct mtk_vcodec_fw *mtk_vcodec_fw_select(void *priv, enum mtk_vcodec_fw_type type,
30					   enum mtk_vcodec_fw_use fw_use);
31void mtk_vcodec_fw_release(struct mtk_vcodec_fw *fw);
32
33int mtk_vcodec_fw_load_firmware(struct mtk_vcodec_fw *fw);
34unsigned int mtk_vcodec_fw_get_vdec_capa(struct mtk_vcodec_fw *fw);
35unsigned int mtk_vcodec_fw_get_venc_capa(struct mtk_vcodec_fw *fw);
36void *mtk_vcodec_fw_map_dm_addr(struct mtk_vcodec_fw *fw, u32 mem_addr);
37int mtk_vcodec_fw_ipi_register(struct mtk_vcodec_fw *fw, int id,
38			       mtk_vcodec_ipi_handler handler,
39			       const char *name, void *priv);
40int mtk_vcodec_fw_ipi_send(struct mtk_vcodec_fw *fw, int id,
41			   void *buf, unsigned int len, unsigned int wait);
42int mtk_vcodec_fw_get_type(struct mtk_vcodec_fw *fw);
43
44#endif /* _MTK_VCODEC_FW_H_ */
45