1 /* 2 * g2d_mixer/g2d_mixer.h 3 * 4 * Copyright (c) 2007-2019 Allwinnertech Co., Ltd. 5 * Author: zhengxiaobin <zhengxiaobin@allwinnertech.com> 6 * 7 * This software is licensed under the terms of the GNU General Public 8 * License version 2, as published by the Free Software Foundation, and 9 * may be copied, distributed, and modified under those terms. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 */ 17 #ifndef _G2D_MIXER_H 18 #define _G2D_MIXER_H 19 20 #include "g2d_driver_i.h" 21 #include "g2d_ovl_v.h" 22 #include "g2d_ovl_u.h" 23 #include "g2d_wb.h" 24 #include "g2d_bld.h" 25 #include "g2d_scal.h" 26 #include "g2d_top.h" 27 28 struct g2d_mixer_task; 29 30 /** 31 * mixer frame 32 */ 33 struct g2d_mixer_frame { 34 struct ovl_v_submodule *ovl_v; 35 struct ovl_u_submodule *ovl_u; 36 struct blender_submodule *bld; 37 struct scaler_submodule *scal; 38 struct wb_submodule *wb; 39 __u32 frame_id; 40 u8 __iomem *g2d_base; 41 struct dmabuf_item *src_item; 42 struct dmabuf_item *dst_item; 43 struct dmabuf_item *ptn_item; 44 struct dmabuf_item *mask_item; 45 __s32 (*destory)(struct g2d_mixer_frame *p_frame); 46 __s32 (*apply)(struct g2d_mixer_frame *p_frame, 47 struct mixer_para *p_para); 48 __s32 (*frame_mem_setup)(struct g2d_mixer_frame *p_frame, 49 struct mixer_para *p_para, 50 struct g2d_mixer_task *p_task); 51 __u32 (*frame_get_reg_block_num)(struct g2d_mixer_frame *p_frame); 52 __u32 (*frame_get_rcq_mem_size)(struct g2d_mixer_frame *p_frame); 53 }; 54 55 /** 56 * mixer task 57 */ 58 struct g2d_mixer_task { 59 struct list_head list; 60 __u32 task_id; 61 __u32 frame_cnt; 62 bool en_split_mem; 63 struct g2d_mixer_frame *frame; 64 struct g2d_rcq_mem_info *p_rcq_info; 65 struct mixer_para *p_para; 66 __g2d_info_t *p_g2d_info; 67 __s32 (*mixer_mem_setup)(struct g2d_mixer_task *p_task, 68 struct mixer_para *p_para); 69 __s32 (*apply)(struct g2d_mixer_task *p_task, 70 struct mixer_para *p_para); 71 __s32 (*destory)(struct g2d_mixer_task *p_task); 72 }; 73 74 75 /** 76 * @name :mixer_task_process 77 * @brief :mixer task process 78 * @param[IN] :p_g2d_info:pointer of hardware resource 79 * @param[IN] :p_para:mixer task parameter 80 * @param[IN] :frame_len:number of frame 81 * @return :0 if success, -1 else 82 */ 83 __s32 mixer_task_process(__g2d_info_t *p_g2d_info, struct mixer_para *p_para, 84 unsigned int frame_len); 85 86 /** 87 * @name :create_mixer_task 88 * @brief :create mixer task instance include memory allocate 89 * @param[IN] :p_g2d_info:pointer of hardware resource 90 * @param[IN] :p_para:mixer task parameter 91 * @param[IN] :frame_len:number of frame 92 * @return :task_id >= 1, else fail 93 */ 94 __u32 create_mixer_task(__g2d_info_t *p_g2d_info, struct mixer_para *p_para, 95 unsigned int frame_len); 96 97 /** 98 * @name :g2d_mixer_get_inst 99 * @brief :get task instance of specified task id 100 * @param[IN] :id: task id 101 * @return :pointer of mixer task or NULL if fail 102 */ 103 struct g2d_mixer_task *g2d_mixer_get_inst(__u32 id); 104 105 #endif /*End of file*/ 106