summaryrefslogtreecommitdiff
path: root/bsp/allwinner/libraries/sunxi-hal/hal/source/g2d_rcq/g2d_mixer.h
blob: 22539bcbdcb71113ad3738cc94074323b864aa19 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/*
 * g2d_mixer/g2d_mixer.h
 *
 * Copyright (c) 2007-2019 Allwinnertech Co., Ltd.
 * Author: zhengxiaobin <[email protected]>
 *
 * This software is licensed under the terms of the GNU General Public
 * License version 2, as published by the Free Software Foundation, and
 * may be copied, distributed, and modified under those terms.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 */
#ifndef _G2D_MIXER_H
#define _G2D_MIXER_H

#include "g2d_driver_i.h"
#include "g2d_ovl_v.h"
#include "g2d_ovl_u.h"
#include "g2d_wb.h"
#include "g2d_bld.h"
#include "g2d_scal.h"
#include "g2d_top.h"

struct g2d_mixer_task;

/**
 * mixer frame
 */
struct g2d_mixer_frame {
	struct ovl_v_submodule *ovl_v;
	struct ovl_u_submodule *ovl_u;
	struct blender_submodule *bld;
	struct scaler_submodule *scal;
	struct wb_submodule *wb;
	__u32 frame_id;
	u8 *g2d_base;
	struct dmabuf_item *src_item;
	struct dmabuf_item *dst_item;
	struct dmabuf_item *ptn_item;
	struct dmabuf_item *mask_item;
	__s32 (*destory)(struct g2d_mixer_frame *p_frame);
	__s32 (*apply)(struct g2d_mixer_frame *p_frame,
		     struct mixer_para *p_para);
	__s32 (*frame_mem_setup)(struct g2d_mixer_frame *p_frame,
				 struct mixer_para *p_para,
				 struct g2d_mixer_task *p_task);
	__u32 (*frame_get_reg_block_num)(struct g2d_mixer_frame *p_frame);
	__u32 (*frame_get_rcq_mem_size)(struct g2d_mixer_frame *p_frame);
};

/**
 * mixer task
 */
struct g2d_mixer_task {
	struct g2d_mixer_task *next;
	int task_id;
	__u32 frame_cnt;
	bool en_split_mem;
	struct g2d_mixer_frame *frame;
	struct g2d_rcq_mem_info *p_rcq_info;
	struct mixer_para *p_para;
	__g2d_info_t *p_g2d_info;
	__s32 (*mixer_mem_setup)(struct g2d_mixer_task *p_task,
				 struct mixer_para *p_para);
	__s32 (*apply)(struct g2d_mixer_task *p_task,
		     struct mixer_para *p_para);
	__s32 (*destory)(struct g2d_mixer_task *p_task);
};


/**
 * @name       :mixer_task_process
 * @brief      :mixer task process
 * @param[IN]  :p_g2d_info:pointer of hardware resource
 * @param[IN]  :p_para:mixer task parameter
 * @param[IN]  :frame_len:number of frame
 * @return     :0 if success, -1 else
 */
__s32 mixer_task_process(__g2d_info_t *p_g2d_info, struct mixer_para *p_para,
			 unsigned int frame_len);

/**
 * @name       :create_mixer_task
 * @brief      :create mixer task instance include memory allocate
 * @param[IN]  :p_g2d_info:pointer of hardware resource
 * @param[IN]  :p_para:mixer task parameter
 * @param[IN]  :frame_len:number of frame
 * @return     :task_id >= 1, else fail
 */
int create_mixer_task(__g2d_info_t *p_g2d_info, struct mixer_para *p_para,
			 unsigned int frame_len);

/**
 * @name       :g2d_mixer_get_inst
 * @brief      :get task instance of specified task id
 * @param[IN]  :id: task id
 * @return     :pointer of mixer task or NULL if fail
 */
struct g2d_mixer_task *g2d_mixer_get_inst(int id);
int g2d_mixer_idr_init(void);
int g2d_mixer_idr_remove(void);



#endif /*End of file*/