1*0934d375SYunfei Dong /* SPDX-License-Identifier: GPL-2.0 */
2*0934d375SYunfei Dong /*
3*0934d375SYunfei Dong * Copyright (c) 2016 MediaTek Inc.
4*0934d375SYunfei Dong * Author: PC Chen <pc.chen@mediatek.com>
5*0934d375SYunfei Dong *	Tiffany Lin <tiffany.lin@mediatek.com>
6*0934d375SYunfei Dong */
7*0934d375SYunfei Dong 
8*0934d375SYunfei Dong #ifndef _MTK_VCODEC_UTIL_H_
9*0934d375SYunfei Dong #define _MTK_VCODEC_UTIL_H_
10*0934d375SYunfei Dong 
11*0934d375SYunfei Dong #include <linux/types.h>
12*0934d375SYunfei Dong #include <linux/dma-direction.h>
13*0934d375SYunfei Dong 
14*0934d375SYunfei Dong #define MTK_DBG_VCODEC_STR "[MTK_VCODEC]"
15*0934d375SYunfei Dong #define MTK_DBG_V4L2_STR "[MTK_V4L2]"
16*0934d375SYunfei Dong 
17*0934d375SYunfei Dong struct mtk_vcodec_mem {
18*0934d375SYunfei Dong 	size_t size;
19*0934d375SYunfei Dong 	void *va;
20*0934d375SYunfei Dong 	dma_addr_t dma_addr;
21*0934d375SYunfei Dong };
22*0934d375SYunfei Dong 
23*0934d375SYunfei Dong struct mtk_vcodec_fb {
24*0934d375SYunfei Dong 	size_t size;
25*0934d375SYunfei Dong 	dma_addr_t dma_addr;
26*0934d375SYunfei Dong };
27*0934d375SYunfei Dong 
28*0934d375SYunfei Dong struct mtk_vcodec_dec_ctx;
29*0934d375SYunfei Dong struct mtk_vcodec_dec_dev;
30*0934d375SYunfei Dong 
31*0934d375SYunfei Dong #undef pr_fmt
32*0934d375SYunfei Dong #define pr_fmt(fmt) "%s(),%d: " fmt, __func__, __LINE__
33*0934d375SYunfei Dong 
34*0934d375SYunfei Dong #define mtk_v4l2_err(plat_dev, fmt, args...)                            \
35*0934d375SYunfei Dong 	dev_err(&(plat_dev)->dev, "[MTK_V4L2][ERROR] " fmt "\n", ##args)
36*0934d375SYunfei Dong 
37*0934d375SYunfei Dong #define mtk_vcodec_err(inst_id, plat_dev, fmt, args...)                                 \
38*0934d375SYunfei Dong 	dev_err(&(plat_dev)->dev, "[MTK_VCODEC][ERROR][%d]: " fmt "\n", inst_id, ##args)
39*0934d375SYunfei Dong 
40*0934d375SYunfei Dong #if defined(CONFIG_DEBUG_FS)
41*0934d375SYunfei Dong extern int mtk_v4l2_dbg_level;
42*0934d375SYunfei Dong extern int mtk_vcodec_dbg;
43*0934d375SYunfei Dong 
44*0934d375SYunfei Dong #define mtk_v4l2_debug(plat_dev, level, fmt, args...)                             \
45*0934d375SYunfei Dong 	do {                                                                      \
46*0934d375SYunfei Dong 		if (mtk_v4l2_dbg_level >= (level))                                \
47*0934d375SYunfei Dong 			dev_dbg(&(plat_dev)->dev, "[MTK_V4L2] %s, %d: " fmt "\n", \
48*0934d375SYunfei Dong 				 __func__, __LINE__, ##args);                     \
49*0934d375SYunfei Dong 	} while (0)
50*0934d375SYunfei Dong 
51*0934d375SYunfei Dong #define mtk_vcodec_debug(inst_id, plat_dev, fmt, args...)                               \
52*0934d375SYunfei Dong 	do {                                                                            \
53*0934d375SYunfei Dong 		if (mtk_vcodec_dbg)                                                     \
54*0934d375SYunfei Dong 			dev_dbg(&(plat_dev)->dev, "[MTK_VCODEC][%d]: %s, %d " fmt "\n", \
55*0934d375SYunfei Dong 				inst_id, __func__, __LINE__, ##args);                   \
56*0934d375SYunfei Dong 	} while (0)
57*0934d375SYunfei Dong #else
58*0934d375SYunfei Dong #define mtk_v4l2_debug(plat_dev, level, fmt, args...)              \
59*0934d375SYunfei Dong 	dev_dbg(&(plat_dev)->dev, "[MTK_V4L2]: " fmt "\n", ##args)
60*0934d375SYunfei Dong 
61*0934d375SYunfei Dong #define mtk_vcodec_debug(inst_id, plat_dev, fmt, args...)			\
62*0934d375SYunfei Dong 	dev_dbg(&(plat_dev)->dev, "[MTK_VCODEC][%d]: " fmt "\n", inst_id, ##args)
63*0934d375SYunfei Dong #endif
64*0934d375SYunfei Dong 
65*0934d375SYunfei Dong void __iomem *mtk_vcodec_get_reg_addr(void __iomem **reg_base, unsigned int reg_idx);
66*0934d375SYunfei Dong int mtk_vcodec_write_vdecsys(struct mtk_vcodec_dec_ctx *ctx, unsigned int reg, unsigned int val);
67*0934d375SYunfei Dong int mtk_vcodec_mem_alloc(void *priv, struct mtk_vcodec_mem *mem);
68*0934d375SYunfei Dong void mtk_vcodec_mem_free(void *priv, struct mtk_vcodec_mem *mem);
69*0934d375SYunfei Dong void mtk_vcodec_set_curr_ctx(struct mtk_vcodec_dec_dev *vdec_dev,
70*0934d375SYunfei Dong 			     struct mtk_vcodec_dec_ctx *ctx, int hw_idx);
71*0934d375SYunfei Dong struct mtk_vcodec_dec_ctx *mtk_vcodec_get_curr_ctx(struct mtk_vcodec_dec_dev *vdec_dev,
72*0934d375SYunfei Dong 						   unsigned int hw_idx);
73*0934d375SYunfei Dong void *mtk_vcodec_get_hw_dev(struct mtk_vcodec_dec_dev *dev, int hw_idx);
74*0934d375SYunfei Dong 
75*0934d375SYunfei Dong #endif /* _MTK_VCODEC_UTIL_H_ */
76