/* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (c) 2022 MediaTek Inc. * Author: Ping-Hsun Wu <ping-hsun.wu@mediatek.com> */ #ifndef __MTK_MDP3_VPU_H__ #define __MTK_MDP3_VPU_H__ #include <linux/platform_device.h> #include "mtk-img-ipi.h" enum mdp_ipi_result { MDP_IPI_SUCCESS = 0, MDP_IPI_ENOMEM = 12, MDP_IPI_EBUSY = 16, MDP_IPI_EINVAL = 22, MDP_IPI_EMINST = 24, MDP_IPI_ERANGE = 34, MDP_IPI_NR_ERRNO, MDP_IPI_EOTHER = MDP_IPI_NR_ERRNO, MDP_IPI_PATH_CANT_MERGE, MDP_IPI_OP_FAIL, }; struct mdp_ipi_init_msg { u32 status; u64 drv_data; u32 work_addr; /* [in] working buffer address */ u32 work_size; /* [in] working buffer size */ } __packed; struct mdp_ipi_deinit_msg { u32 status; u64 drv_data; u32 work_addr; } __packed; struct mdp_vpu_dev { /* synchronization protect for accessing vpu working buffer info */ struct mutex *lock; struct mtk_scp *scp; struct completion ipi_acked; void *param; dma_addr_t param_addr; size_t param_size; void *work; dma_addr_t work_addr; size_t work_size; void *config; dma_addr_t config_addr; size_t config_size; u32 status; }; void mdp_vpu_shared_mem_free(struct mdp_vpu_dev *vpu); int mdp_vpu_dev_init(struct mdp_vpu_dev *vpu, struct mtk_scp *scp, struct mutex *lock /* for sync */); int mdp_vpu_dev_deinit(struct mdp_vpu_dev *vpu); int mdp_vpu_process(struct mdp_vpu_dev *vpu, struct img_ipi_frameparam *param); #endif /* __MTK_MDP3_VPU_H__ */