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