162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (c) 2022 MediaTek Inc.
462306a36Sopenharmony_ci * Author: Ping-Hsun Wu <ping-hsun.wu@mediatek.com>
562306a36Sopenharmony_ci */
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#ifndef __MTK_MDP3_VPU_H__
862306a36Sopenharmony_ci#define __MTK_MDP3_VPU_H__
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#include <linux/platform_device.h>
1162306a36Sopenharmony_ci#include "mtk-img-ipi.h"
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cienum mdp_ipi_result {
1462306a36Sopenharmony_ci	MDP_IPI_SUCCESS	= 0,
1562306a36Sopenharmony_ci	MDP_IPI_ENOMEM	= 12,
1662306a36Sopenharmony_ci	MDP_IPI_EBUSY	= 16,
1762306a36Sopenharmony_ci	MDP_IPI_EINVAL	= 22,
1862306a36Sopenharmony_ci	MDP_IPI_EMINST	= 24,
1962306a36Sopenharmony_ci	MDP_IPI_ERANGE	= 34,
2062306a36Sopenharmony_ci	MDP_IPI_NR_ERRNO,
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci	MDP_IPI_EOTHER	= MDP_IPI_NR_ERRNO,
2362306a36Sopenharmony_ci	MDP_IPI_PATH_CANT_MERGE,
2462306a36Sopenharmony_ci	MDP_IPI_OP_FAIL,
2562306a36Sopenharmony_ci};
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_cistruct mdp_ipi_init_msg {
2862306a36Sopenharmony_ci	u32	status;
2962306a36Sopenharmony_ci	u64	drv_data;
3062306a36Sopenharmony_ci	u32	work_addr;	/* [in] working buffer address */
3162306a36Sopenharmony_ci	u32	work_size;	/* [in] working buffer size */
3262306a36Sopenharmony_ci} __packed;
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_cistruct mdp_ipi_deinit_msg {
3562306a36Sopenharmony_ci	u32	status;
3662306a36Sopenharmony_ci	u64	drv_data;
3762306a36Sopenharmony_ci	u32	work_addr;
3862306a36Sopenharmony_ci} __packed;
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_cistruct mdp_vpu_dev {
4162306a36Sopenharmony_ci	/* synchronization protect for accessing vpu working buffer info */
4262306a36Sopenharmony_ci	struct mutex		*lock;
4362306a36Sopenharmony_ci	struct mtk_scp		*scp;
4462306a36Sopenharmony_ci	struct completion	ipi_acked;
4562306a36Sopenharmony_ci	void			*param;
4662306a36Sopenharmony_ci	dma_addr_t		param_addr;
4762306a36Sopenharmony_ci	size_t			param_size;
4862306a36Sopenharmony_ci	void			*work;
4962306a36Sopenharmony_ci	dma_addr_t		work_addr;
5062306a36Sopenharmony_ci	size_t			work_size;
5162306a36Sopenharmony_ci	void			*config;
5262306a36Sopenharmony_ci	dma_addr_t		config_addr;
5362306a36Sopenharmony_ci	size_t			config_size;
5462306a36Sopenharmony_ci	u32			status;
5562306a36Sopenharmony_ci};
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_civoid mdp_vpu_shared_mem_free(struct mdp_vpu_dev *vpu);
5862306a36Sopenharmony_ciint mdp_vpu_dev_init(struct mdp_vpu_dev *vpu, struct mtk_scp *scp,
5962306a36Sopenharmony_ci		     struct mutex *lock /* for sync */);
6062306a36Sopenharmony_ciint mdp_vpu_dev_deinit(struct mdp_vpu_dev *vpu);
6162306a36Sopenharmony_ciint mdp_vpu_process(struct mdp_vpu_dev *vpu, struct img_ipi_frameparam *param);
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci#endif  /* __MTK_MDP3_VPU_H__ */
64