• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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