xref: /linux/drivers/gpu/drm/amd/display/dc/spl/dc_spl_types.h (revision 994aeacbb3c039b4f3e02e76e6d39407920e76c6)
1 // SPDX-License-Identifier: MIT
2 //
3 // Copyright 2024 Advanced Micro Devices, Inc.
4 
5 #ifndef __DC_SPL_TYPES_H__
6 #define __DC_SPL_TYPES_H__
7 
8 #include "spl_os_types.h"   // swap
9 #ifndef SPL_ASSERT
10 #define SPL_ASSERT(_bool) ((void *)0)
11 #endif
12 #include "spl_fixpt31_32.h"	// fixed31_32 and related functions
13 #include "spl_custom_float.h" // custom float and related functions
14 
15 struct spl_size {
16 	uint32_t width;
17 	uint32_t height;
18 };
19 struct spl_rect	{
20 	int x;
21 	int y;
22 	int width;
23 	int height;
24 };
25 
26 struct spl_ratios {
27 	struct spl_fixed31_32 horz;
28 	struct spl_fixed31_32 vert;
29 	struct spl_fixed31_32 horz_c;
30 	struct spl_fixed31_32 vert_c;
31 };
32 struct spl_inits {
33 	struct spl_fixed31_32 h;
34 	struct spl_fixed31_32 h_c;
35 	struct spl_fixed31_32 v;
36 	struct spl_fixed31_32 v_c;
37 };
38 
39 struct spl_taps	{
40 	uint32_t v_taps;
41 	uint32_t h_taps;
42 	uint32_t v_taps_c;
43 	uint32_t h_taps_c;
44 	bool integer_scaling;
45 };
46 enum spl_view_3d {
47 	SPL_VIEW_3D_NONE = 0,
48 	SPL_VIEW_3D_FRAME_SEQUENTIAL,
49 	SPL_VIEW_3D_SIDE_BY_SIDE,
50 	SPL_VIEW_3D_TOP_AND_BOTTOM,
51 	SPL_VIEW_3D_COUNT,
52 	SPL_VIEW_3D_FIRST = SPL_VIEW_3D_FRAME_SEQUENTIAL
53 };
54 /* Pixel format */
55 enum spl_pixel_format {
56 	/*graph*/
57 	SPL_PIXEL_FORMAT_UNINITIALIZED,
58 	SPL_PIXEL_FORMAT_INDEX8,
59 	SPL_PIXEL_FORMAT_RGB565,
60 	SPL_PIXEL_FORMAT_ARGB8888,
61 	SPL_PIXEL_FORMAT_ARGB2101010,
62 	SPL_PIXEL_FORMAT_ARGB2101010_XRBIAS,
63 	SPL_PIXEL_FORMAT_FP16,
64 	/*video*/
65 	SPL_PIXEL_FORMAT_420BPP8,
66 	SPL_PIXEL_FORMAT_420BPP10,
67 	/*end of pixel format definition*/
68 	SPL_PIXEL_FORMAT_INVALID,
69 	SPL_PIXEL_FORMAT_422BPP8,
70 	SPL_PIXEL_FORMAT_422BPP10,
71 	SPL_PIXEL_FORMAT_GRPH_BEGIN = SPL_PIXEL_FORMAT_INDEX8,
72 	SPL_PIXEL_FORMAT_GRPH_END = SPL_PIXEL_FORMAT_FP16,
73 	SPL_PIXEL_FORMAT_VIDEO_BEGIN = SPL_PIXEL_FORMAT_420BPP8,
74 	SPL_PIXEL_FORMAT_VIDEO_END = SPL_PIXEL_FORMAT_420BPP10,
75 	SPL_PIXEL_FORMAT_UNKNOWN
76 };
77 
78 enum lb_memory_config {
79 	/* Enable all 3 pieces of memory */
80 	LB_MEMORY_CONFIG_0 = 0,
81 
82 	/* Enable only the first piece of memory */
83 	LB_MEMORY_CONFIG_1 = 1,
84 
85 	/* Enable only the second piece of memory */
86 	LB_MEMORY_CONFIG_2 = 2,
87 
88 	/* Only applicable in 4:2:0 mode, enable all 3 pieces of memory and the
89 	 * last piece of chroma memory used for the luma storage
90 	 */
91 	LB_MEMORY_CONFIG_3 = 3
92 };
93 
94 /* Rotation angle */
95 enum spl_rotation_angle {
96 	SPL_ROTATION_ANGLE_0 = 0,
97 	SPL_ROTATION_ANGLE_90,
98 	SPL_ROTATION_ANGLE_180,
99 	SPL_ROTATION_ANGLE_270,
100 	SPL_ROTATION_ANGLE_COUNT
101 };
102 enum spl_color_space {
103 	SPL_COLOR_SPACE_UNKNOWN,
104 	SPL_COLOR_SPACE_SRGB,
105 	SPL_COLOR_SPACE_XR_RGB,
106 	SPL_COLOR_SPACE_SRGB_LIMITED,
107 	SPL_COLOR_SPACE_MSREF_SCRGB,
108 	SPL_COLOR_SPACE_YCBCR601,
109 	SPL_COLOR_SPACE_YCBCR709,
110 	SPL_COLOR_SPACE_XV_YCC_709,
111 	SPL_COLOR_SPACE_XV_YCC_601,
112 	SPL_COLOR_SPACE_YCBCR601_LIMITED,
113 	SPL_COLOR_SPACE_YCBCR709_LIMITED,
114 	SPL_COLOR_SPACE_2020_RGB_FULLRANGE,
115 	SPL_COLOR_SPACE_2020_RGB_LIMITEDRANGE,
116 	SPL_COLOR_SPACE_2020_YCBCR,
117 	SPL_COLOR_SPACE_ADOBERGB,
118 	SPL_COLOR_SPACE_DCIP3,
119 	SPL_COLOR_SPACE_DISPLAYNATIVE,
120 	SPL_COLOR_SPACE_DOLBYVISION,
121 	SPL_COLOR_SPACE_APPCTRL,
122 	SPL_COLOR_SPACE_CUSTOMPOINTS,
123 	SPL_COLOR_SPACE_YCBCR709_BLACK,
124 };
125 
126 enum chroma_cositing {
127 	CHROMA_COSITING_NONE,
128 	CHROMA_COSITING_LEFT,
129 	CHROMA_COSITING_TOPLEFT,
130 	CHROMA_COSITING_COUNT
131 };
132 
133 // Scratch space for calculating scaler params
134 struct spl_scaler_data {
135 	int h_active;
136 	int v_active;
137 	struct spl_taps taps;
138 	struct spl_rect viewport;
139 	struct spl_rect viewport_c;
140 	struct spl_rect recout;
141 	struct spl_ratios ratios;
142 	struct spl_ratios recip_ratios;
143 	struct spl_inits inits;
144 };
145 
146 enum spl_transfer_func_type {
147 	SPL_TF_TYPE_PREDEFINED,
148 	SPL_TF_TYPE_DISTRIBUTED_POINTS,
149 	SPL_TF_TYPE_BYPASS,
150 	SPL_TF_TYPE_HWPWL
151 };
152 
153 enum spl_transfer_func_predefined {
154 	SPL_TRANSFER_FUNCTION_SRGB,
155 	SPL_TRANSFER_FUNCTION_BT709,
156 	SPL_TRANSFER_FUNCTION_PQ,
157 	SPL_TRANSFER_FUNCTION_LINEAR,
158 	SPL_TRANSFER_FUNCTION_UNITY,
159 	SPL_TRANSFER_FUNCTION_HLG,
160 	SPL_TRANSFER_FUNCTION_HLG12,
161 	SPL_TRANSFER_FUNCTION_GAMMA22,
162 	SPL_TRANSFER_FUNCTION_GAMMA24,
163 	SPL_TRANSFER_FUNCTION_GAMMA26
164 };
165 
166 /*==============================================================*/
167 /* Below structs are defined to hold hw register data */
168 
169 // SPL output is used to set below registers
170 
171 // MPC_SIZE - set based on scl_data h_active and v_active
172 struct mpc_size	{
173 	uint32_t width;
174 	uint32_t height;
175 };
176 // SCL_MODE - set based on scl_data.ratios and always_scale
177 enum scl_mode {
178 	SCL_MODE_SCALING_444_BYPASS = 0,
179 	SCL_MODE_SCALING_444_RGB_ENABLE = 1,
180 	SCL_MODE_SCALING_444_YCBCR_ENABLE = 2,
181 	SCL_MODE_SCALING_420_YCBCR_ENABLE = 3,
182 	SCL_MODE_SCALING_420_LUMA_BYPASS = 4,
183 	SCL_MODE_SCALING_420_CHROMA_BYPASS = 5,
184 	SCL_MODE_DSCL_BYPASS = 6
185 };
186 // SCL_BLACK_COLOR - set based on scl_data.format
187 struct scl_black_color	{
188 	uint32_t offset_rgb_y;
189 	uint32_t offset_rgb_cbcr;
190 };
191 // RATIO - set based on scl_data.ratios
192 struct ratio	{
193 	uint32_t h_scale_ratio;
194 	uint32_t v_scale_ratio;
195 	uint32_t h_scale_ratio_c;
196 	uint32_t v_scale_ratio_c;
197 };
198 
199 // INIT - set based on scl_data.init
200 struct init	{
201 	// SCL_HORZ_FILTER_INIT
202 	uint32_t h_filter_init_frac;	//	SCL_H_INIT_FRAC
203 	uint32_t h_filter_init_int;	//	SCL_H_INIT_INT
204 	// SCL_HORZ_FILTER_INIT_C
205 	uint32_t h_filter_init_frac_c;	//	SCL_H_INIT_FRAC_C
206 	uint32_t h_filter_init_int_c;	//	SCL_H_INIT_INT_C
207 	// SCL_VERT_FILTER_INIT
208 	uint32_t v_filter_init_frac;	//	SCL_V_INIT_FRAC
209 	uint32_t v_filter_init_int;	//	SCL_V_INIT_INT
210 	//	SCL_VERT_FILTER_INIT_C
211 	uint32_t v_filter_init_frac_c;	//	SCL_V_INIT_FRAC_C
212 	uint32_t v_filter_init_int_c;	//	SCL_V_INIT_INT_C
213 	//	SCL_VERT_FILTER_INIT_BOT
214 	uint32_t v_filter_init_bot_frac;	//	SCL_V_INIT_FRAC_BOT
215 	uint32_t v_filter_init_bot_int;	//	SCL_V_INIT_INT_BOT
216 	//	SCL_VERT_FILTER_INIT_BOT_C
217 	uint32_t v_filter_init_bot_frac_c;	//	SCL_V_INIT_FRAC_BOT_C
218 	uint32_t v_filter_init_bot_int_c;	//	SCL_V_INIT_INT_BOT_C
219 };
220 
221 // FILTER - calculated based on scl_data ratios and taps
222 
223 // iSHARP
224 struct isharp_noise_det {
225 	uint32_t enable;	// ISHARP_NOISEDET_EN
226 	uint32_t mode;		// ISHARP_NOISEDET_MODE
227 	uint32_t uthreshold;	// ISHARP_NOISEDET_UTHRE
228 	uint32_t dthreshold;	// ISHARP_NOISEDET_DTHRE
229 	uint32_t pwl_start_in;	// ISHARP_NOISEDET_PWL_START_IN
230 	uint32_t pwl_end_in;	// ISHARP_NOISEDET_PWL_END_IN
231 	uint32_t pwl_slope;	// ISHARP_NOISEDET_PWL_SLOPE
232 };
233 struct isharp_lba	{
234 	uint32_t mode;	// ISHARP_LBA_MODE
235 	uint32_t in_seg[6];
236 	uint32_t base_seg[6];
237 	uint32_t slope_seg[6];
238 };
239 struct isharp_fmt	{
240 	uint32_t mode;	// ISHARP_FMT_MODE
241 	uint32_t norm;	// ISHARP_FMT_NORM
242 };
243 struct isharp_nldelta_sclip	{
244 	uint32_t enable_p;	// ISHARP_NLDELTA_SCLIP_EN_P
245 	uint32_t pivot_p;	// ISHARP_NLDELTA_SCLIP_PIVOT_P
246 	uint32_t slope_p;	// ISHARP_NLDELTA_SCLIP_SLOPE_P
247 	uint32_t enable_n;	// ISHARP_NLDELTA_SCLIP_EN_N
248 	uint32_t pivot_n;	// ISHARP_NLDELTA_SCLIP_PIVOT_N
249 	uint32_t slope_n;	// ISHARP_NLDELTA_SCLIP_SLOPE_N
250 };
251 enum isharp_en	{
252 	ISHARP_DISABLE,
253 	ISHARP_ENABLE
254 };
255 // Below struct holds values that can be directly used to program
256 // hardware registers. No conversion/clamping is required
257 struct dscl_prog_data {
258 	struct spl_rect recout; // RECOUT - set based on scl_data.recout
259 	struct mpc_size mpc_size;
260 	uint32_t dscl_mode;
261 	struct scl_black_color scl_black_color;
262 	struct ratio ratios;
263 	struct init init;
264 	struct spl_taps taps;	// TAPS - set based on scl_data.taps
265 	struct spl_rect viewport;
266 	struct spl_rect viewport_c;
267 	// raw filter
268 	const uint16_t *filter_h;
269 	const uint16_t *filter_v;
270 	const uint16_t *filter_h_c;
271 	const uint16_t *filter_v_c;
272 	// EASF registers
273 	uint32_t easf_matrix_mode;
274 	uint32_t easf_ltonl_en;
275 	uint32_t easf_v_en;
276 	uint32_t easf_v_sharp_factor;
277 	uint32_t easf_v_ring;
278 	uint32_t easf_v_bf1_en;
279 	uint32_t easf_v_bf2_mode;
280 	uint32_t easf_v_bf3_mode;
281 	uint32_t easf_v_bf2_flat1_gain;
282 	uint32_t easf_v_bf2_flat2_gain;
283 	uint32_t easf_v_bf2_roc_gain;
284 	uint32_t easf_v_ringest_3tap_dntilt_uptilt;
285 	uint32_t easf_v_ringest_3tap_uptilt_max;
286 	uint32_t easf_v_ringest_3tap_dntilt_slope;
287 	uint32_t easf_v_ringest_3tap_uptilt1_slope;
288 	uint32_t easf_v_ringest_3tap_uptilt2_slope;
289 	uint32_t easf_v_ringest_3tap_uptilt2_offset;
290 	uint32_t easf_v_ringest_eventap_reduceg1;
291 	uint32_t easf_v_ringest_eventap_reduceg2;
292 	uint32_t easf_v_ringest_eventap_gain1;
293 	uint32_t easf_v_ringest_eventap_gain2;
294 	uint32_t easf_v_bf_maxa;
295 	uint32_t easf_v_bf_maxb;
296 	uint32_t easf_v_bf_mina;
297 	uint32_t easf_v_bf_minb;
298 	uint32_t easf_v_bf1_pwl_in_seg0;
299 	uint32_t easf_v_bf1_pwl_base_seg0;
300 	uint32_t easf_v_bf1_pwl_slope_seg0;
301 	uint32_t easf_v_bf1_pwl_in_seg1;
302 	uint32_t easf_v_bf1_pwl_base_seg1;
303 	uint32_t easf_v_bf1_pwl_slope_seg1;
304 	uint32_t easf_v_bf1_pwl_in_seg2;
305 	uint32_t easf_v_bf1_pwl_base_seg2;
306 	uint32_t easf_v_bf1_pwl_slope_seg2;
307 	uint32_t easf_v_bf1_pwl_in_seg3;
308 	uint32_t easf_v_bf1_pwl_base_seg3;
309 	uint32_t easf_v_bf1_pwl_slope_seg3;
310 	uint32_t easf_v_bf1_pwl_in_seg4;
311 	uint32_t easf_v_bf1_pwl_base_seg4;
312 	uint32_t easf_v_bf1_pwl_slope_seg4;
313 	uint32_t easf_v_bf1_pwl_in_seg5;
314 	uint32_t easf_v_bf1_pwl_base_seg5;
315 	uint32_t easf_v_bf1_pwl_slope_seg5;
316 	uint32_t easf_v_bf1_pwl_in_seg6;
317 	uint32_t easf_v_bf1_pwl_base_seg6;
318 	uint32_t easf_v_bf1_pwl_slope_seg6;
319 	uint32_t easf_v_bf1_pwl_in_seg7;
320 	uint32_t easf_v_bf1_pwl_base_seg7;
321 	uint32_t easf_v_bf3_pwl_in_set0;
322 	uint32_t easf_v_bf3_pwl_base_set0;
323 	uint32_t easf_v_bf3_pwl_slope_set0;
324 	uint32_t easf_v_bf3_pwl_in_set1;
325 	uint32_t easf_v_bf3_pwl_base_set1;
326 	uint32_t easf_v_bf3_pwl_slope_set1;
327 	uint32_t easf_v_bf3_pwl_in_set2;
328 	uint32_t easf_v_bf3_pwl_base_set2;
329 	uint32_t easf_v_bf3_pwl_slope_set2;
330 	uint32_t easf_v_bf3_pwl_in_set3;
331 	uint32_t easf_v_bf3_pwl_base_set3;
332 	uint32_t easf_v_bf3_pwl_slope_set3;
333 	uint32_t easf_v_bf3_pwl_in_set4;
334 	uint32_t easf_v_bf3_pwl_base_set4;
335 	uint32_t easf_v_bf3_pwl_slope_set4;
336 	uint32_t easf_v_bf3_pwl_in_set5;
337 	uint32_t easf_v_bf3_pwl_base_set5;
338 	uint32_t easf_h_en;
339 	uint32_t easf_h_sharp_factor;
340 	uint32_t easf_h_ring;
341 	uint32_t easf_h_bf1_en;
342 	uint32_t easf_h_bf2_mode;
343 	uint32_t easf_h_bf3_mode;
344 	uint32_t easf_h_bf2_flat1_gain;
345 	uint32_t easf_h_bf2_flat2_gain;
346 	uint32_t easf_h_bf2_roc_gain;
347 	uint32_t easf_h_ringest_eventap_reduceg1;
348 	uint32_t easf_h_ringest_eventap_reduceg2;
349 	uint32_t easf_h_ringest_eventap_gain1;
350 	uint32_t easf_h_ringest_eventap_gain2;
351 	uint32_t easf_h_bf_maxa;
352 	uint32_t easf_h_bf_maxb;
353 	uint32_t easf_h_bf_mina;
354 	uint32_t easf_h_bf_minb;
355 	uint32_t easf_h_bf1_pwl_in_seg0;
356 	uint32_t easf_h_bf1_pwl_base_seg0;
357 	uint32_t easf_h_bf1_pwl_slope_seg0;
358 	uint32_t easf_h_bf1_pwl_in_seg1;
359 	uint32_t easf_h_bf1_pwl_base_seg1;
360 	uint32_t easf_h_bf1_pwl_slope_seg1;
361 	uint32_t easf_h_bf1_pwl_in_seg2;
362 	uint32_t easf_h_bf1_pwl_base_seg2;
363 	uint32_t easf_h_bf1_pwl_slope_seg2;
364 	uint32_t easf_h_bf1_pwl_in_seg3;
365 	uint32_t easf_h_bf1_pwl_base_seg3;
366 	uint32_t easf_h_bf1_pwl_slope_seg3;
367 	uint32_t easf_h_bf1_pwl_in_seg4;
368 	uint32_t easf_h_bf1_pwl_base_seg4;
369 	uint32_t easf_h_bf1_pwl_slope_seg4;
370 	uint32_t easf_h_bf1_pwl_in_seg5;
371 	uint32_t easf_h_bf1_pwl_base_seg5;
372 	uint32_t easf_h_bf1_pwl_slope_seg5;
373 	uint32_t easf_h_bf1_pwl_in_seg6;
374 	uint32_t easf_h_bf1_pwl_base_seg6;
375 	uint32_t easf_h_bf1_pwl_slope_seg6;
376 	uint32_t easf_h_bf1_pwl_in_seg7;
377 	uint32_t easf_h_bf1_pwl_base_seg7;
378 	uint32_t easf_h_bf3_pwl_in_set0;
379 	uint32_t easf_h_bf3_pwl_base_set0;
380 	uint32_t easf_h_bf3_pwl_slope_set0;
381 	uint32_t easf_h_bf3_pwl_in_set1;
382 	uint32_t easf_h_bf3_pwl_base_set1;
383 	uint32_t easf_h_bf3_pwl_slope_set1;
384 	uint32_t easf_h_bf3_pwl_in_set2;
385 	uint32_t easf_h_bf3_pwl_base_set2;
386 	uint32_t easf_h_bf3_pwl_slope_set2;
387 	uint32_t easf_h_bf3_pwl_in_set3;
388 	uint32_t easf_h_bf3_pwl_base_set3;
389 	uint32_t easf_h_bf3_pwl_slope_set3;
390 	uint32_t easf_h_bf3_pwl_in_set4;
391 	uint32_t easf_h_bf3_pwl_base_set4;
392 	uint32_t easf_h_bf3_pwl_slope_set4;
393 	uint32_t easf_h_bf3_pwl_in_set5;
394 	uint32_t easf_h_bf3_pwl_base_set5;
395 	uint32_t easf_matrix_c0;
396 	uint32_t easf_matrix_c1;
397 	uint32_t easf_matrix_c2;
398 	uint32_t easf_matrix_c3;
399 	// iSharp
400 	uint32_t isharp_en;     //      ISHARP_EN
401 	struct isharp_noise_det isharp_noise_det;       //      ISHARP_NOISEDET
402 	uint32_t isharp_nl_en;  //      ISHARP_NL_EN ? TODO:check this
403 	struct isharp_lba isharp_lba;   //      ISHARP_LBA
404 	struct isharp_fmt isharp_fmt;   //      ISHARP_FMT
405 	const uint32_t *isharp_delta;
406 	struct isharp_nldelta_sclip isharp_nldelta_sclip;       //      ISHARP_NLDELTA_SCLIP
407 	/* blur and scale filter */
408 	const uint16_t *filter_blur_scale_v;
409 	const uint16_t *filter_blur_scale_h;
410 	int sharpness_level; /* Track sharpness level */
411 };
412 
413 /* SPL input and output definitions */
414 // SPL scratch struct
415 struct spl_scratch {
416 	// Pack all SPL outputs in scl_data
417 	struct spl_scaler_data scl_data;
418 };
419 
420 /* SPL input and output definitions */
421 // SPL outputs struct
422 struct spl_out	{
423 	// Pack all output need to program hw registers
424 	struct dscl_prog_data *dscl_prog_data;
425 };
426 
427 // end of SPL outputs
428 
429 // SPL inputs
430 
431 // Basic input information
432 struct basic_in	{
433 	enum spl_pixel_format format; // Pixel Format
434 	enum chroma_cositing cositing; /* Chroma Subsampling Offset */
435 	struct spl_rect src_rect; // Source rect
436 	struct spl_rect dst_rect; // Destination Rect
437 	struct spl_rect clip_rect; // Clip rect
438 	enum spl_rotation_angle rotation;  // Rotation
439 	bool horizontal_mirror;  // Horizontal mirror
440 	int mpc_combine_h; // MPC Horizontal Combine Factor (split_count)
441 	int mpc_combine_v; // MPC Vertical Combine Factor (split_idx)
442 	// Inputs for adaptive scaler - TODO
443 	enum spl_transfer_func_type tf_type; /* Transfer function type */
444 	enum spl_transfer_func_predefined tf_predefined_type; /* Transfer function predefined type */
445 	// enum dc_transfer_func_predefined tf;
446 	enum spl_color_space color_space;	//	Color Space
447 	unsigned int max_luminance;	//	Max Luminance TODO: Is determined in dc_hw_sequencer.c is_sdr
448 	bool film_grain_applied;	//	Film Grain Applied // TODO: To check from where to get this?
449 };
450 
451 // Basic output information
452 struct basic_out {
453 	struct spl_size output_size; // Output Size
454 	struct spl_rect dst_rect;	// Destination Rect
455 	struct spl_rect src_rect;	// Source rect
456 	int odm_combine_factor;	// deprecated
457 	struct spl_rect odm_slice_rect; // OPP input rect in timing active
458 	enum spl_view_3d view_format;	// TODO: View format Check if it is chroma subsampling
459 	bool always_scale;	// Is always scale enabled? Required for getting SCL_MODE
460 	int max_downscale_src_width; // Required to get optimal no of taps
461 	bool alpha_en;
462 	bool use_two_pixels_per_container;
463 };
464 enum sharpness_setting	{
465 	SHARPNESS_HW_OFF = 0,
466 	SHARPNESS_ZERO,
467 	SHARPNESS_CUSTOM
468 };
469 struct spl_sharpness_range {
470 	int sdr_rgb_min;
471 	int sdr_rgb_max;
472 	int sdr_rgb_mid;
473 	int sdr_yuv_min;
474 	int sdr_yuv_max;
475 	int sdr_yuv_mid;
476 	int hdr_rgb_min;
477 	int hdr_rgb_max;
478 	int hdr_rgb_mid;
479 };
480 struct adaptive_sharpness {
481 	bool enable;
482 	int sharpness_level;
483 	struct spl_sharpness_range sharpness_range;
484 };
485 enum linear_light_scaling	{	// convert it in translation logic
486 	LLS_PREF_DONT_CARE = 0,
487 	LLS_PREF_YES,
488 	LLS_PREF_NO
489 };
490 enum sharpen_policy {
491 	SHARPEN_ALWAYS = 0,
492 	SHARPEN_YUV = 1,
493 	SHARPEN_RGB_FULLSCREEN_YUV = 2,
494 	SHARPEN_FULLSCREEN_ALL = 3
495 };
496 enum scale_to_sharpness_policy {
497 	NO_SCALE_TO_SHARPNESS_ADJ = 0,
498 	SCALE_TO_SHARPNESS_ADJ_YUV = 1,
499 	SCALE_TO_SHARPNESS_ADJ_ALL = 2
500 };
501 struct spl_funcs	{
502 	void (*spl_calc_lb_num_partitions)
503 		(bool alpha_en,
504 		const struct spl_scaler_data *scl_data,
505 		enum lb_memory_config lb_config,
506 		int *num_part_y,
507 		int *num_part_c);
508 };
509 
510 struct spl_debug {
511 	int visual_confirm_base_offset;
512 	int visual_confirm_dpp_offset;
513 	enum sharpen_policy sharpen_policy;
514 	enum scale_to_sharpness_policy scale_to_sharpness_policy;
515 };
516 
517 struct spl_in	{
518 	struct basic_out basic_out;
519 	struct basic_in basic_in;
520 	// Basic slice information
521 	int odm_slice_index;	// ODM Slice Index using get_odm_split_index
522 	struct spl_taps scaling_quality; // Explicit Scaling Quality
523 	struct spl_funcs *funcs;
524 	// Inputs for isharp and EASF
525 	struct adaptive_sharpness adaptive_sharpness;	//	Adaptive Sharpness
526 	enum linear_light_scaling lls_pref;	//	Linear Light Scaling
527 	bool prefer_easf;
528 	bool disable_easf;
529 	struct spl_debug debug;
530 	bool is_fullscreen;
531 	bool is_hdr_on;
532 	int h_active;
533 	int v_active;
534 	int sdr_white_level_nits;
535 };
536 // end of SPL inputs
537 
538 #endif /* __DC_SPL_TYPES_H__ */
539