dwb.h revision 1.1
1/* Copyright 2012-17 Advanced Micro Devices, Inc.
2 *
3 * Permission is hereby granted, free of charge, to any person obtaining a
4 * copy of this software and associated documentation files (the "Software"),
5 * to deal in the Software without restriction, including without limitation
6 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
7 * and/or sell copies of the Software, and to permit persons to whom the
8 * Software is furnished to do so, subject to the following conditions:
9 *
10 * The above copyright notice and this permission notice shall be included in
11 * all copies or substantial portions of the Software.
12 *
13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
16 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
17 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
18 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
19 * OTHER DEALINGS IN THE SOFTWARE.
20 *
21 * Authors: AMD
22 *
23 */
24
25#ifndef __DC_DWBC_H__
26#define __DC_DWBC_H__
27
28#include "dal_types.h"
29#include "dc_hw_types.h"
30
31#define DWB_SW_V2	1
32#define DWB_MCIF_BUF_COUNT 4
33
34/* forward declaration of mcif_wb struct */
35struct mcif_wb;
36
37
38enum dwb_sw_version {
39	dwb_ver_1_0 = 1,
40	dwb_ver_2_0 = 2,
41};
42
43enum dwb_source {
44	dwb_src_scl = 0,	/* for DCE7x/9x, DCN won't support. */
45	dwb_src_blnd,		/* for DCE7x/9x */
46	dwb_src_fmt,		/* for DCE7x/9x */
47	dwb_src_otg0 = 0x100,	/* for DCN1.x/DCN2.x, register: mmDWB_SOURCE_SELECT */
48	dwb_src_otg1,		/* for DCN1.x/DCN2.x */
49	dwb_src_otg2,		/* for DCN1.x/DCN2.x */
50	dwb_src_otg3,		/* for DCN1.x/DCN2.x */
51};
52
53/* DCN1.x, DCN2.x support 2 pipes */
54enum dwb_pipe {
55	dwb_pipe0 = 0,
56#if defined(CONFIG_DRM_AMD_DC_DCN)
57	dwb_pipe1,
58#endif
59	dwb_pipe_max_num,
60};
61
62enum dwb_frame_capture_enable {
63	DWB_FRAME_CAPTURE_DISABLE = 0,
64	DWB_FRAME_CAPTURE_ENABLE = 1,
65};
66
67enum wbscl_coef_filter_type_sel {
68	WBSCL_COEF_LUMA_VERT_FILTER = 0,
69	WBSCL_COEF_CHROMA_VERT_FILTER = 1,
70	WBSCL_COEF_LUMA_HORZ_FILTER = 2,
71	WBSCL_COEF_CHROMA_HORZ_FILTER = 3
72};
73
74
75struct dwb_warmup_params {
76	bool	warmup_en;	/* false: normal mode, true: enable pattern generator */
77	bool	warmup_mode;	/* false: 420, true: 444 */
78	bool	warmup_depth;	/* false: 8bit, true: 10bit */
79	int	warmup_data;	/* Data to be sent by pattern generator (same for each pixel component) */
80	int	warmup_width;	/* Pattern width (pixels) */
81	int	warmup_height;	/* Pattern height (lines) */
82};
83
84struct dwb_caps {
85	enum dce_version hw_version;	/* DCN engine version. */
86	enum dwb_sw_version sw_version;	/* DWB sw implementation version. */
87	unsigned int	reserved[6];	/* Reserved for future use, MUST BE 0. */
88	unsigned int	adapter_id;
89	unsigned int	num_pipes;	/* number of DWB pipes */
90	struct {
91		unsigned int support_dwb	:1;
92		unsigned int support_ogam	:1;
93		unsigned int support_wbscl	:1;
94		unsigned int support_ocsc	:1;
95		unsigned int support_stereo :1;
96	} caps;
97	unsigned int	 reserved2[9];	/* Reserved for future use, MUST BE 0. */
98};
99
100struct dwbc {
101	const struct dwbc_funcs *funcs;
102	struct dc_context *ctx;
103	int inst;
104	struct mcif_wb *mcif;
105	bool status;
106	int inputSrcSelect;
107	bool dwb_output_black;
108	enum dc_transfer_func_predefined tf;
109	enum dc_color_space output_color_space;
110	bool dwb_is_efc_transition;
111	bool dwb_is_drc;
112	int wb_src_plane_inst;/*hubp, mpcc, inst*/
113	bool update_privacymask;
114	uint32_t mask_id;
115        int otg_inst;
116        bool mvc_cfg;
117};
118
119struct dwbc_funcs {
120	bool (*get_caps)(
121		struct dwbc *dwbc,
122		struct dwb_caps *caps);
123
124	bool (*enable)(
125		struct dwbc *dwbc,
126		struct dc_dwb_params *params);
127
128	bool (*disable)(struct dwbc *dwbc);
129
130	bool (*update)(
131		struct dwbc *dwbc,
132		struct dc_dwb_params *params);
133
134	bool (*is_enabled)(
135		struct dwbc *dwbc);
136
137	void (*set_stereo)(
138		struct dwbc *dwbc,
139		struct dwb_stereo_params *stereo_params);
140
141	void (*set_new_content)(
142		struct dwbc *dwbc,
143		bool is_new_content);
144
145
146	void (*set_warmup)(
147		struct dwbc *dwbc,
148		struct dwb_warmup_params *warmup_params);
149
150
151	bool (*get_dwb_status)(
152		struct dwbc *dwbc);
153	void (*dwb_set_scaler)(
154		struct dwbc *dwbc,
155		struct dc_dwb_params *params);
156};
157
158#endif
159